尝试在Cakephp中实现连接查询

时间:2013-07-04 13:48:18

标签: sql cakephp mysqli cakephp-2.0 cakephp-2.1

我正在开发一个cakephp并尝试实现连接。或内连接查询...我现在正在做的是这个

$this->bindModel(array(
    'belongsTo' => array(
        'Contact' => array(
            'className' => 'Contact',
            'foreignKey' => false,
            'conditions' => array(
                'Message.user_id = Contact.user_id',
                'Message.mobileNo = Contact.mobileNo'
            )
        )
    )
), false);

return $message_details = $this->find('all', array(
    'conditions' => array(),
    'fields' => array('DISTINCT mobileNo')
));

此查询正在执行 LEFT JOIN 表..我想要的是两个表之间的加入内部联接

2 个答案:

答案 0 :(得分:1)

您可以在the documentation中说明,在belongsTo配置中指定联接类型。默认为左,但您可以使用任何有效的连接类型。只需将'type' => 'inner'添加到配置数组中,就可以得到如下内容:

$this->bindModel(array(
    'belongsTo' => array(
        'Contact' => array(
            'className' => 'Contact',
            'foreignKey' => false,
            'conditions' => array(
                'Message.user_id = Contact.user_id',
                'Message.mobileNo = Contact.mobileNo'
            ),
            'type' => 'inner' // Simply add this
        )
    )
), false);

答案 1 :(得分:1)

或者,您可以在不使用bingModel的情况下将连接添加到查询中:

return $message_details = $this->find('all', array(
    'conditions' => array(),
    'fields' => array('DISTINCT mobileNo'),
    'joins'=>array(
        array(
            'table'=>'contacts,
            'alias'=>'Contact',
            'type'=>'INNER',
            'conditions'=>array(
                'Message.user_id = Contact.user_id',
                'Message.mobileNo = Contact.mobileNo'
            )
        )
    )
));