我有桌子
Items, Attributes,Taxonomies, Taxonomy_attributes,Item_attributes.
Taxonomy_attributes有两个字段attribute_id(属性表id的外键)和taxonomy_id(分类表id的外键)。 另一方面,Item_attributes有两个字段attribute_id(id属性表的外键)和item_id(id项表的外键)。 属性表具有以下字段: - 名称,类型和可检查(为0或1)。 Items表有字段id和model。 分类表包含字段if和name。
我想在属性模型中添加一个方法,该方法返回所有属性的列表,其中checkable等于1并与项目和分类法连接,返回项目模型&每个属性的分类名称。
我的代码如下: -
public function getCheckables($checkable)
{
$data = $this->find('all',array(
'fields' => array('Attribute.name', 'Attribute.type', 'Item.model', 'Taxonomy.name'),
'conditions' => array('Attribute.checkable' => 1),
'joins' => array(
array(
'table' => 'item_attributes',
'alias' => 'ItemAttribute',
'type' => 'INNER',
'conditions' => 'ItemAttribute.Item_id = Item.id',
),
array(
'table' => 'items',
'alias' => 'Item',
'type' => 'INNER',
'conditions' => 'ItemAttribute.item_id = Item.id'
),
array(
'table' => 'taxonomy_attributes',
'alias' => 'TaxonomyAttribute',
'type' => 'INNER',
'conditions' => 'TaxonomyAttribute.Taxonomy_id = Taxonomy.id'
)
),
'recursive'=>-1
)
);
pr($data); die();
}
任何人都能用正确的代码指导我吗?
答案 0 :(得分:1)
您的两个联接具有相同的条件:'conditions'=> 'ItemAttribute.Item_id = Item.id',如果是第一个,则Item表尚未加入,如果是第二个,因为您的第一个条件错误,ItemAttribute表未加入。
答案 1 :(得分:0)
public function getCheckables($checkable)
{
$data = $this->find('all',array(
'fields' => array('Attribute.name', 'Attribute.type', 'Item.model', 'Taxonomy.name'),
'conditions' => array('Attribute.checkable' => 1),
'joins' => array(
array(
'table' => 'item_attributes',
'alias' => 'ItemAttribute',
'type' => 'INNER',
'conditions' => 'ItemAttribute.attribute_id = Attribute.id',
),
array(
'table' => 'items',
'alias' => 'Item',
'type' => 'INNER',
'conditions' => 'ItemAttribute.item_id = Item.id'
),
array(
'table' => 'taxonomies',
'alias' => 'Taxonomy',
'type' => 'LEFT',
'conditions' => 'Item.category_id = Item.id'
)
),
'recursive'=>-1
)
);
pr($data); die();
}