使用cakephp从初始数组列表中查找多个ID,但顺序不受尊重
我有一个最喜欢的模型链接到我的用户模型。他与许多人断绝了关系。 所以我可以像这样从任何用户那里检索所有收藏夹使用cakephp从初始数组列表中查找多个ID,但顺序不受尊重,cakephp,cakephp-1.3,Cakephp,Cakephp 1.3,我有一个最喜欢的模型链接到我的用户模型。他与许多人断绝了关系。 所以我可以像这样从任何用户那里检索所有收藏夹 [User] => Array ( [id] => 60 [username] => username [email] => xxxxxx@gmail.com ) [Favorite] => Array ( [0] => Array (
[User] => Array
(
[id] => 60
[username] => username
[email] => xxxxxx@gmail.com
)
[Favorite] => Array
(
[0] => Array
(
[id] => 7
[book_id] => 15
[user_id] => 60
[position] => 1
[created] => 2012-08-08 04:08:54
)
[1] => Array
(
[id] => 6
[book_id] => 17
[user_id] => 60
[position] => 1
[created] => 2012-07-26 04:08:32
)
)
但是这个结果并没有显示所有的书籍数据和相关对象。所以我决定用一个find('all')来查找它们,给出ID列表([15,16…])。唯一的问题是它没有链接到Favorite.created DESC上的我的订单。
它以另一个顺序检索书籍项目
我的问题实际上是这样的:
$result = $this->User->findById($id);
$conditions = array('Book.id' => Set::extract($result, 'Favorite.{n}.book_id'));
$favorites = $this->Book->find('all', array('conditions' => $conditions));
你知道我该如何改变我的模型关系吗?或者我在cakephp中的查询?您需要在您的图书模型和您喜爱的模型之间创建连接。在您的情况下,可以使用BindModel创建联接。在我的示例中,我使用了“hasOne”,因为Cakephp不与hasMany进行连接,只与hasOne和BelongsTo进行连接
$this->Book->bindModel(array('hasOne' => array(
'Favorite' => array(
'className' => 'Favorite'))));
$id = $this->Auth->user('id');
$data = $this->Book->find('all', array(
'conditions' => array('Favorite.user_id' => $id),
'order' => array('Favorite.created' => 'DESC')));
仅此而已。发布当前查询将是一个良好的开端;)我所理解的是“在Book和Favorite Model类之间应该有HABTM关系,而不是hasOne。”你的建议是什么?在这种情况下,Book只有一个特定用户的Favorite。如果我使用HABTM,我没有需要显示的所有数据。这个解决方案适合我。谢谢