CakePHP在find方法中使用JOIN

时间:2013-07-03 19:17:00

标签: sql cakephp cakephp-2.0 cakephp-2.1

我是cakephp中的新手并试图实现此查询

 SELECT DISTINCT textmessage.mobileNo FROM textmessage 
 JOIN contacts
  ON textmessage.User_id=contacts.User_id AND textmessage.mobileNo = Contacts.mobileNo

我期待这里只有一个结果..想在 textMessage 控制器中实现此查询...我以前从未在CAKEPHP中使用连接查询...我实际上有一个 mobileNo如果 textmessage 表的 mobileNo 也在通讯录表表中两个表中的字段,我想要检索mobileNo p>

这是我根据我的要求修改了你的查询..

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

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

1 个答案:

答案 0 :(得分:1)

将以下代码放入控制器代码中:

如果您只需要单一记录:

function test1()
{
$this->TextMessage->bindModel(array('belongsTo' => array('Contact' => array('className' => 'Contact',
                                        'foreignKey' => false,
                                        'conditions' => array('TextMessage.user_id = Contact.user_id')))), false);
$message_details = $this->TextMessage->find('all', array('conditions' => array(),
                                             'fields' => array('DISTINCT mobileNo')));

}

如果您有多条与每个联系人对应的短信,请尝试以下操作:

function test2()
{
$this->Contact->bindModel(array('hasMany' => array('TextMessage' => array('className' => 'TextMessage',
                                      'foreignKey' => false,
                                      'conditions' => array('TextMessage.user_id = Contact.user_id'),
                                      'fields' => array('DISTINCT mobileNo')))
                    ), false);
$message_details = $this->Contact->find('all', array('conditions' => array()));                   
}

您还可以在模型中编写关联。我给你举了一个动态加入任何表的例子。

根据您编辑的问题,如果您不需要两个阵列。使用query()功能。

希望这能满足您的要求。