0

我有一个收藏模型链接到我的用户模型。他与 HasMany 的关系已完成。所以我可以像这样从任何用户那里检索所有收藏夹。

[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
            )

    )

但是这个结果并没有向我显示所有 Book 数据和相关对象。所以 ii 决定用 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 中的查询?

4

1 回答 1

0

您需要在您的图书模型和您的收藏模型之间创建一个联接。在您的情况下,您可以使用 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')));

就这样。

于 2012-08-10T02:35:40.793 回答