cakephp:如何在模型中而不是控制器中使用find语句
我读到了“胖模特和瘦控制器”的概念。我当然愿意遵循这个概念 现在,我所有的控制器都很胖,我的模型都很瘦。我在控制器中有很多find stmt(查询),我想把它们转移到模型中。但是我不知道怎么做 我应该将find语句放在模型的哪个函数中?在模型中设置STMT之后,我是否能够自动在各自的视图中查看数据cakephp:如何在模型中而不是控制器中使用find语句,cakephp,model,find,Cakephp,Model,Find,我读到了“胖模特和瘦控制器”的概念。我当然愿意遵循这个概念 现在,我所有的控制器都很胖,我的模型都很瘦。我在控制器中有很多find stmt(查询),我想把它们转移到模型中。但是我不知道怎么做 我应该将find语句放在模型的哪个函数中?在模型中设置STMT之后,我是否能够自动在各自的视图中查看数据 谁能给我举个例子吗?我已经阅读了cakephp食谱博客示例。在那里,find stmt位于控制器中,而不是模型中。该模型仅包含关系和验证。我还没有看到包含find stmts的模型示例。您的模型上可以
谁能给我举个例子吗?我已经阅读了cakephp食谱博客示例。在那里,find stmt位于控制器中,而不是模型中。该模型仅包含关系和验证。我还没有看到包含find stmts的模型示例。您的模型上可以有类似的内容
function getProductGroups($company_id){
$product_groups = $this->find('all',
array('conditions' => array('ProductGroup.company_id' => $company_id) )
);
return $product_groups;
}
*通过这种方式,您还可以对其他控制器使用find语句。要在模型中使用find,您只需编写: //in User model $this->find('first', array('recursive' => '-1', 'conditions' => array('User.id' => $userId), 'fields' => $this->authFields)); //在用户模型中 $this->find('first',array('recursive'=>'-1','conditions'=>array('User.id'=>$userId),'fields'=>$this->authFields));
希望它能帮助你回答部分问题。您可以在不使用模型类声明的情况下使用find方法(因此
$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;
}
}
?>
填充的$products
变量(如果revelant数据库表中有记录)现在将在您的视图中可用
详细介绍了蛋糕的概念,食谱中还有一个关于蛋糕的概念。mensch,非常感谢您的精彩解释和链接。我将能够通过产品模型查找获得所有相关模型数据。也就是说,如果产品有一个制造商,而产品有很多客户,我是否能够通过产品模型的查找来获取制造商和产品数据?mensch,太好了,我尝试了一个简单的测试项目,是的,我能够在视图中获取两个相关模型的数据。再次感谢你,很高兴听到你这么说!您确实可以通过将
recursive
设置为高于0的值,或者通过如下方式访问find方法来访问关联的数据:$this->Customer->find()
。
<?php
class ProductsController extends AppController {
//Components, helpers, etc. go here
function index() {
$products = $this->Product->getProducts(10);
$this->set('products', $products);
}
}
?>