0

私はCakephp 2.xに取り組んでいます。次のようなクエリがあります。

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

               'order'=>'Message.idTextMessage DESC',
            )
        )
    ), false);

    return $this->find('all', array('conditions' => array('Message.User_id' => $userid),
        'contain' => array('Contact' ),
        'fields' => array('Message.mobileNo',
            'Contact.mobileNo',
            'Contact.workNo',
            'Contact.homeNo',
            'Contact.other',
            'Contact.name',
            'Message.dateTime',
            'Message.type',
            'Message.body'),
        'group' => 'Message.mobileNo',
        'limit' => 6));
}

クエリが期待どおりに機能していません。問題はわかりました。問題は、このクエリを印刷するときです。この単一引用符 (' ') を ('Contact.mobileNo') のように AND のように追加していMessageます。mobileNoIN ('Contact.mobileNo', 'Contact.workNo', 'Contact.homeNo', 'Contact.other'))

したがって、SQL yog の引用符を削除すると、. クエリは機能します。つまり、この部分では、ここの連絡先から mobileno、workno などを見つけていないと思います。誰が私が何をすべきか知っていますか?

完璧に機能している単純なSQLクエリを見たい場合は..ここにあります

          SELECT Message.mobileNo,
        Contact.mobileNo,
        Contact.workNo,
        Contact.homeNo,
        Contact.other,
        Contact.name,

        Message.body,
        Message.idTextMessage
   FROM cakephp_db.textmessage AS Message
   LEFT JOIN cakephp_db.contacts AS Contact ON Message.user_id = Contact.user_id
                                     AND Message.mobileNo IN (Contact.mobileNo,           Contact.workNo, Contact.homeNo, Contact.other)
 WHERE Message.User_id = 23
 GROUP BY Message.mobileNo
ORDER BY Message.idTextMessage DESC LIMIT 6
4

1 に答える 1

2

次のように変更する必要があります。

$this->bindModel(array(
        'belongsTo' => array(
            'Contact' => array(
                'className' => 'Contact',
                'foreignKey' => false,
                'conditions' => array(
                    'Message.user_id = Contact.user_id',
                    '`Message`.`mobileNo` IN (`Contact`.`mobileNo`,`Contact`.`workNo`,`Contact`.`homeNo`,`Contact`.`other`)'),
                'order'=>'Message.idTextMessage DESC',
            )
        )
    ), false);

条件にキーと値を使用する場合、ケーキは値を列名ではなく文字列値と見なします。

于 2013-08-14T05:59:16.933 に答える