使用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,我没有需要显示的所有数据。这个解决方案适合我。谢谢