duanjigua5753 2014-11-21 20:27
浏览 17
已采纳

cakephp协会的条件

i have 3 model, with this relationships:

class A extends AppModel {   
    public $belongsTo = array(
        "B" => array(
            'className' => 'B',
            'foreignKey' => 'b_id'
        )
    );
}

class B extends AppModel {    
    public $belongsTo = array(
        "C" => array(
            'className' => 'C',
            'foreignKey' => 'c_id'
        )
    );
}

class C extends AppModel {    
}

first, fetch model A records with this code:

$this->A->find('all', array('recursive'=>2));

when print query log, instead of two left join, this query was seen:

SELECT * FROM A LEFT JOIN B ON (A.b_id = B.id) 

And for each result record, a query to get the C model information like this seen:

SELECT * FROM C WHERE id = ? 

is there a way with a 2 join query to do that?

  • 写回答

1条回答 默认 最新

  • donglan6777 2014-11-21 20:43
    关注

    I've found when CakePHP does your find via multiple queries, you can force it to get all in a single query by using manual joins:

    $this->A->find('all', array(
        'recursive' => -1,
        'joins' => array(
            array(
                'table' => 'b',
                'alias' => 'B',
                'type' => 'left',
                'conditions' => array('B.id = A.b_id'),
            ),
            array(
                'table' => 'c',
                'alias' => 'C',
                'type' => 'left',
                'conditions' => array('C.id = B.c_id'),
            ),
        ),
    );
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥35 MIMO天线稀疏阵列排布问题
  • ¥60 用visual studio编写程序,利用间接平差求解水准网
  • ¥15 Llama如何调用shell或者Python
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?
  • ¥15 win10权限管理,限制普通用户使用删除功能
  • ¥15 minnio内存占用过大,内存没被回收(Windows环境)
  • ¥65 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?