首页 文章

找到多个id但是使用cakephp从初始数组列表中不遵守命令

提问于
浏览
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数据和相关对象 . 所以我决定用一个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的查询?

1 回答

  • 0

    您需要在图书模型和收藏模型之间创建连接 . 在您的情况下,您可以使用BindModel来创建Join . 在我的例子中,我使用了'hasOne',因为Cakephp不会使用hasMne和只有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')));
    

    就这样 .

相关问题