我是CakePHP的新手。我想像我这样在我的数据库中进行查询
SELECT m.id, l.*, lp.picture_path
FROM member m INNER JOIN listing l ON m.member_id = l.member_id
INNER JOIN listingPicture lp ON l.listing_id = lp.listing_id
WHERE lp.picture_default='1'
我的cakephp中有3个模型:Member,Listing和ListingPicture,每个模型都有以下关系
从我的会员控制器如何执行上述查询?
我试过
$this->Member->Listing->find("all")
...虽然效果很好但是我添加了这样的条件:
$this->Member->Listing->find('all', array(
'conditions' => array('ListingPicture.picture_default'=>'1')));
...我收到了错误。
因为我是CakePHP的新手,所以我不知道怎么看错误。
有人可以告诉我如何执行此查询吗?
答案 0 :(得分:1)
确保将您的模型设置为:
public $actsAs = array('Containable');
然后使用CakePHP的可包含行为,仅包含所需的关联数据,以及指定的字段和条件。
$this->Member->Listing->find('all', array(
'fields' => array('*'),
'contain' => array(
'Member' => array(
'fields' => array('id')
)
'ListingPicture' => array(
'conditions' => array('ListingPicture.picture_default' => '1')
'fields' => array('picture_path')
)
)
));
为了遵循MVC概念,建议将查找保留在模型中而不是控制器中。这不是必需的,但是 - 它可以更容易地确切地知道所有发现的位置,并与“胖模型/瘦子控制器”的口头禅保持一致。在这种情况下,它就像是:
//in the Member Controller
$listings = $this->Member->Listing->getListings();
//in the Listing Model
function getListings() {
$listings = $this->find('all', ...
return $listings;
}
答案 1 :(得分:0)
您应该在将ListPicture绑定到列表时给出条件。
$this->Member->Listing->bindModel(array(
'ListPicture'=>array(
'condtions'=>array('ListingPicture.picture_default'=>'1')
))
);