私はCakePHP 1.3で簡単なメッセージングシステムを実装しようとしています。私がする必要があるのは、ログインしているユーザーが会話しているユーザーの配列を返すためのクエリを実行することです(メッセージの受信、メッセージの送信、またはその両方)。CakePHPメッセージングシステム
そのように私のUserモデルが設定されている:
class User extends AppModel {
var $name = 'User';
var $actsAs = array('Containable');
var $hasMany = array(
'SentMessages' =>
array (
'className' => 'Message',
'foreignKey' => 'sender_id'
),
'ReceivedMessages' =>
array (
'className' => 'Message',
'foreignKey' => 'receiver_id'
)
);
}
私はちょうどユーザーとそれに関連するメッセージを取得するために収容可能を使用し、それらに条件を追加することができますが、それぞれの間のものにそれらのメッセージを制限する文を含みますユーザーとログインしたユーザー
$users = $this->User->find('all', array(
'contain' => array(
'ReceivedMessages' => array(
'conditions' => array(
'receiver_id' => $my_user_id
)
),
'SentMessages' => array(
'conditions' => array(
'sender_id' => $my_user_id
)
)
)
));
しかし、これはまだ私のDBにすべてのユーザーを返します。任意のSentMessagesまたはReceivedMessagesを持つユーザーのみが返されるようにこのクエリを記述する方法はありますか?
ありがとうございます!
:
は、その後、次の検索を実行しますこのIDのレコード。クエリの出力を確認する - 実際にSQLで条件を適用しているのはケーキですか?また、Cakeがusersテーブルの 'receiver_id'を探している場合は、各条件フィールドにテーブル/モデル名を追加してみることもできます。 – Ross
ええ、それは設定されています。 containsステートメントの条件は機能しています。$ my_user_idへの、または$ my_user_idからのメッセージのみが取り出されます。私の問題は、$ userには、SentMessagesとReceivedMessagesが空の場合でも、自分のDBのすべてのユーザーが含まれているということです。私はそれらのユーザーが全く検索されないようにしたいと思います。 – NathanGaskin
ああ、私は 'User-> find( 'all')'をしているからです。私は働くかもしれない何かを投稿します – Ross