使用hasMany模型查找条件 [英] Find conditions with hasMany model
问题描述
我有4个模型:
项目------ hasMany ---->详细
项目------ hasMany ---->收藏
项目------ hasMany ---->类别
如何查找所有包含Favourite.member_id ='8'和Category.item_category_id ='1'的项目
我的项目模型关系:
public $ hasMany = array(
'Detail'=& b'className'=>'Detail',
'foreignKey'=>'item_id',
'dependent'=> true,
'conditions'=&
'order'=>'created DESC',
),
'Category'=> array(
'className'=>'Category',
'foreignKey'=>'item_id',
'dependent'=> true,
'conditions'=>'',
'order'=>'created DESC' ,
),
'Favorite'=> array(
'className'=>'Favorite',
'foreignKey'=> 'item_id',
'dependent'=> true,
'conditions'=> '',
'order'=> 'created DESC',
)
);
我使用这个查询()并且确定:
$ this-> set('test',$ this-> Item-> query(SELECT items。*
FROM items,categories,
WHERE items.id = items_item_categories.item_id
AND items.id = favorites.item_id
AND categories.item_category_id = 1 AND favourites.member_id = 8));
但我不喜欢使用query(),我把它更改为find似乎不太好:
$ this-> set('test',$ this-> Item-> find ('all',array(
'contains'=> array(
'ItemDetail',
'Category'=> array('conditions'=> array item_category_id'=> 1)),
'Favorite'=> array('conditions'=> array('favorite.member_id'=> 8)));
解决方案您需要在模型上调用containableBehaivor
<?php
class Item extends AppModel {
public $ actsAs = array('Containable');
}
>$ items = $ this-> Item-> find('all',array(
'contains'=> array(
'ItemDetail',
'Category'=> array(
'conditions'=> array('Category.item_category_id'=> 1)
),
'Favorite'=& b $ b'conditions'=> array('Favorite.member_id'=> 8)
)
)
);
$ this-> set('test',$ items);
请尝试使用加入
$ items = $ this-> Item-> find('all',array(
'joins'=> array(
array(
'table'=>'categories',
'alias '=>'Category',
'type'=>'inner',
'conditions'=> array('Category.item_category_id'=> 1)
)
array(
'table'=>'favorites',
'alias'=>'Favorite',
'type'=>'inner',
'conditions'=> array('Favorite.member_id'=> 8,'Item.id = Favorite.item_id')
)
),
'contains'=> ; array('ItemDetail','Category','Favorite')
);
$ this-> set('test',$ items);
I have 4 model:
Item------hasMany---->Detail
Item------hasMany---->Favourite
Item------hasMany---->Category
How can I find all Item that has Favourite.member_id = '8' and Category.item_category_id = '1'
Here is my Item model relation:
public $hasMany = array( 'Detail' => array( 'className' => 'Detail', 'foreignKey' => 'item_id', 'dependent' => true, 'conditions' => '', 'order' => 'created DESC', ), 'Category' => array( 'className' => 'Category', 'foreignKey' => 'item_id', 'dependent' => true, 'conditions' => '', 'order' => 'created DESC', ), 'Favorite' => array( 'className' => 'Favorite', 'foreignKey' => 'item_id', 'dependent' => true, 'conditions' => '', 'order' => 'created DESC', ) );
I used this query() and it's ok:
$this->set('test',$this->Item->query("SELECT items.* FROM items, categories, favourites WHERE items.id = items_item_categories.item_id AND items.id = favorites.item_id AND categories.item_category_id = 1 AND favourites.member_id = 8"));
But I don't like using query(), and I change it into find(), and it seems not good:
$this->set('test',$this->Item->find('all', array( 'contain'=>array( 'ItemDetail', 'Category'=>array('conditions'=>array('Category.item_category_id'=>1)), 'Favorite'=>array('conditions'=>array('Favorite.member_id'=>8)));
解决方案You need call the containableBehaivor on your model
<?php class Item extends AppModel { public $actsAs = array('Containable'); }
in your controller you can make the query
$items = $this->Item->find('all', array( 'contain'=>array( 'ItemDetail', 'Category'=>array( 'conditions'=>array('Category.item_category_id'=>1) ), 'Favorite'=>array( 'conditions'=>array('Favorite.member_id'=>8) ) ) ); $this->set('test', $items);
try using Joins
$items = $this->Item->find('all', array( 'joins' => array( array( 'table' => 'categories', 'alias' => 'Category', 'type' => 'inner', 'conditions'=> array('Category.item_category_id' => 1) ), array( 'table' => 'favorites', 'alias' => 'Favorite', 'type' => 'inner', 'conditions'=> array('Favorite.member_id' => 8, 'Item.id = Favorite.item_id') ) ), 'contain'=>array('ItemDetail','Category','Favorite') ); $this->set('test', $items);
这篇关于使用hasMany模型查找条件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!