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();   
    }