【发布时间】:2012-02-02 06:14:19
【问题描述】:
我正在尝试在 CakePHP 1.3 中实现一个简单的消息传递系统。我需要做的是执行查询以返回一组用户,我的登录用户正在与这些用户进行对话(因此要么收到了消息,要么收到了消息,要么发送了消息,或两者兼而有之)。
我的用户模型是这样设置的:
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'
)
);
}
我可以使用 Containable 仅检索用户及其相关消息,并向这些 Contain 语句添加条件以将这些消息限制为每个用户和我的登录用户之间的消息。
$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的记录。检查查询的输出 - cake 是否真的在 SQL 中应用条件?您还可以尝试将表/模型名称附加到每个条件字段,以防 Cake 在用户表中查找receiver_id。 -
是的,已经设置好了。包含语句的条件有效 - 仅检索到或来自 $my_user_id 的消息。我的问题是 $users 包含我的数据库中的每个用户,即使是 SentMessages 和 ReceivedMessages 为空的用户。我希望根本不检索这些用户。
-
啊,我希望在这种情况下是因为您正在执行
User->find('all')。我会发布一些可能有用的东西
标签: cakephp cakephp-1.3 cakephp-model