【问题标题】:CakePHP use JOIN in find methodCakePHP 在 find 方法中使用 JOIN
【发布时间】:2013-07-03 19:16:59
【问题描述】:

我是 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 也在 Contacts 表中,我想检索 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')));

【问题讨论】:

    标签: sql cakephp cakephp-2.0 cakephp-2.1


    【解决方案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()函数。

    希望这能满足您的要求。

    【讨论】:

    • @Arjun Jain 感谢 Arjun .. 但您在查询中没有使用“distinct”?
    • 当我运行你的第一个查询时..它没有给我所需的结果。
    • 我在哪里得到你的查询中的 mobileNo 也没有明显的用途?
    • 我编辑了我的答案。在定义关联期间,您可以使用fields 选项并提供您需要的所有字段。 DISTINCT 关键字必须在必填字段名称之前使用。
    • 好吧,首先我认为我没有得到所需的结果......因为我想要的是我想要一个单列数据..我不想要一个数组......只是一个单一的字段数据.. . 它正在向我返回 2 个数组...一个是联系人数组,另一个是消息数组...我给你工作的 sql,现在只给我一列数据..所以我想要 Cake 中的确切副本跨度>
    猜你喜欢
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    相关资源
    最近更新 更多