我想在CakePHP 1.3中实现一个简单的消息传递系统。我需要做的是执行一个查询来返回一个用户数组,我的登录用户正在与之进行对话(因此从收到消息,发送消息到或两者都有)。CakePHP消息系统
我的用户模型建立像这样:
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
)
)
)
));
但是,这仍然返回我的数据库中的每个用户。有没有办法写这个查询,以便只有具有任何SentMessages或ReceivedMessages的用户被返回?
谢谢!
我想'$ my_user_id'绝对设置,并有此ID的记录。检查查询的输出 - 是实际在SQL中应用条件的蛋糕吗?如果Cake正在查找用户表中的'receiver_id',则还可以尝试将表格/型号名称附加到每个条件字段。 – Ross 2012-01-04 10:38:26
是的,它已设置。包含语句的条件是正在工作的 - 仅检索到或从$ my_user_id发送的消息。我的问题是,$用户包含我的数据库中的每个用户,甚至是那些SentMessages和ReceivedMessages为空的用户。我希望这些用户不要被检索。 – NathanGaskin 2012-01-04 10:44:42
啊,我期望在这种情况下,这是因为你正在做一个'User-> find('all')'。我会发布可能有用的东西 – Ross 2012-01-04 10:47:12