Ответы, которые были даны, отвечают на часть вашего вопроса. Вы можете использовать метод find без объявления класса Model (поэтому $this->find()
вместо $this->Model->find()
).
Чтобы придерживаться принципа "толстые модели, тощие контроллеры", ваши модели должны содержать большую часть бизнес-логики вашего приложения, тогда как контроллеры обрабатывают данные из модели, используемой вашими представлениями.
Итак, если вы хотите, чтобы вся логика find
происходила в ваших моделях, вы должны сделать следующее.
product.php:
<?php
class ProductModel extends AppModel {
//Associations, etc. go here
function getProducts($limit=5) {
$products = array();
$products = $this->find('all', array('limit' => $limit));
return $products;
}
}
?>
Обратите внимание, что вы не можете использовать $this->set()
в своей модели, вы должны использовать его в своем контроллере:
ProductsController.php:
<?php
class ProductsController extends AppController {
//Components, helpers, etc. go here
function index() {
$products = $this->Product->getProducts(10);
$this->set('products', $products);
}
}
?>
Заполненная переменная $products
(если в соответствующей таблице базы данных есть записи) теперь будет доступна в вашем представлении.
Это отличная статья , в которой подробно описываются концепции Cake, а в Кулинарной книге есть еще одна статья MVC в целом .