CakePHP:联接操作不工作
我有桌子CakePHP:联接操作不工作,php,mysql,sql,cakephp,join,Php,Mysql,Sql,Cakephp,Join,我有桌子 Items, Attributes,Taxonomies, Taxonomy_attributes,Item_attributes. Taxonomy_属性有两个字段attribute_id(属性表的id的外键)和Taxonomy_id(分类表的id的外键)。 另一方面,Item_属性有两个字段attribute_id(它是id attributes表的外键)和Item_id(它是items表的id的外键)。 属性表有以下字段:-名称、类型和可检查(0或1)。 表中的项具有字段id和
Items, Attributes,Taxonomies, Taxonomy_attributes,Item_attributes.
Taxonomy_属性有两个字段attribute_id(属性表的id的外键)和Taxonomy_id(分类表的id的外键)。
另一方面,Item_属性有两个字段attribute_id(它是id attributes表的外键)和Item_id(它是items表的id的外键)。
属性表有以下字段:-名称、类型和可检查(0或1)。
表中的项具有字段id和模型。
分类表包含字段if和name
我想在属性模型中添加一个方法,该方法返回所有属性的列表,checkable等于1,并与items和taxonomy连接,该方法返回每个属性的item model和taxonomy名称
我的代码如下:-
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();
}
有人能给我提供正确的代码吗?2个联接具有相同的条件:“条件”=>“itemtattribute.Item\u id=Item.id”,对于第一个联接,Item表尚未联接,而对于第二个联接,由于第一个条件错误,itemtattribute表未联接。实际解决方案
你的模型中是否定义了与其他3种类型的关系?你是对的。两个联接具有相同的条件。但还有一些其他问题。我接受你的答案,因为你的答案是正确的@塔纳托斯
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();
}