0
我嘗試編寫一個類似於facebook的消息系統。 我拿到了表格;CakePHP限制關聯
USERS
id, name
MESSAGES
user_from, user_to, message
和我的模型:
USER
public $hasMany = array(
'MessageFrom' => array(
'className' => 'Message',
'foreignKey' => 'user_from'
),
'MessageTo' => array(
'className' => 'Message',
'foreignKey' => 'user_to'
)
);
var $hasAndBelongsToMany = array(
'UserMessages' => array(
'className' => 'User',
'joinTable' => 'messages',
'foreignKey' => 'user_from',
'associationForeignKey' => 'user_to'
)
);
MESSAGE
public $belongsTo = array(
'UserFrom' => array(
'className' => 'User',
'foreignKey' => 'user_from'
),
'UserTo' => array(
'className' => 'User',
'foreignKey' => 'user_to'
)
);
一切工作不錯,我的意思是發送和從用戶recive mesages,閱讀它。 但我想在用戶面板上做聊天列表。
我必須選擇只有最後一條消息的所有用戶才能與用戶創建聊天列表。
我的數組是這樣的:
(int) 0 => array(
'Message' => array(
'id' => '12',
'user_from' => '2',
'user_to' => '1',
'message' => 'Hello user 1!',
),
'UserFrom' => array(
'id' => '2',
'username' => 'user2',
),
'UserTo' => array(
'id' => '1',
'username' => 'user1',
)
),
(int) 1 => array(
'Message' => array(
'id' => '12',
'user_from' => '1',
'user_to' => '2',
'message' => 'Oh Hello user 2!',
),
'UserFrom' => array(
'id' => '1',
'username' => 'user1',
),
'UserTo' => array(
'id' => '2',
'username' => 'user2',
)
),
(int) 2 => array(
'Message' => array(
'id' => '12',
'user_from' => '1',
'user_to' => '5',
'message' => 'Message to user 5 from user 1',
),
'UserFrom' => array(
'id' => '1',
'username' => 'user1',
),
'UserTo' => array(
'id' => '5',
'username' => 'user5',
)
),
現在的登錄用戶ID EX IM = 1,我想在我的聊天列表
USER 5(最後的消息看:消息從用戶5用戶1) USER 2(最後一條消息:哦你好用戶1)
的simpy:我想只有一個最後的消息,或從用戶的本陣...... 我不需要所有郵件列表...只有最後一個消息來自或來自用戶,比如GMAIL b牛。 現在,我有所有的用戶和消息關聯...
我創建一個函數...它獲取所有與用戶的消息... 如何獲得最大的唯一一個消息ID?
public function getChats($user_id) {
$this->order = 'Message.date DESC, Message.id DESC';
$data = $this->find('all', array(
'conditions' => array(
'OR' => array(
array('user_to' => $user_id),
array('user_from' => $user_id)
)
)
));
return $data;
}
-
SELECT `Message`.`id`, `Message`.`user_from`, `Message`.`user_to`, `Message`.`message`, `Message`.`date`, `UserFrom`.`id`, `UserFrom`.`username`, `UserFrom`.`email`, `UserFrom`.`password`, `UserFrom`.`name`, `UserFrom`.`surname`, `UserFrom`.`city`, `UserFrom`.`street`, `UserFrom`.`born_date`, `UserFrom`.`role`, `UserTo`.`id`, `UserTo`.`username`, `UserTo`.`email`, `UserTo`.`password`, `UserTo`.`name`, `UserTo`.`surname`, `UserTo`.`city`, `UserTo`.`street`, `UserTo`.`born_date`, `UserTo`.`role` FROM `gametrade_cake`.`messages` AS `Message` LEFT JOIN `gametrade_cake`.`users` AS `UserFrom` ON (`Message`.`user_from` = `UserFrom`.`id`) LEFT JOIN `gametrade_cake`.`users` AS `UserTo` ON (`Message`.`user_to` = `UserTo`.`id`) WHERE ((`user_to` = 1) OR (`user_from` = 1))
GROUP BY UserFrom.id,UserTo.id
ORDER BY `Message`.`id` DESC
該查詢選擇我的消息,但我不知道爲什麼被message.id DESC不要爲了它... 這個順序由mesage.id ASC ...
任何人都可以幫助我?
請寫由你所得到的上述結果的查詢。所以我可以幫助一下。 – 2012-08-14 10:21:23
您無法限制僅運行一個查詢的相關模型的結果。您必須運行第二個查詢或運行復雜/原始SQL查詢來完成此操作。 – rlcabral 2012-08-14 11:07:22