找到多个id但是从cakephp的初始数组列表中没有遵守命令

时间:2012-08-09 22:44:45

标签: cakephp cakephp-1.3

我有一个与我的用户模型相关联的收藏模型。他的关系是用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数据和相关对象。所以我决定用一个发现('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 :(得分:0)

您需要在图书模型和收藏模型之间创建联接。在您的情况下,您可以使用BindModel来创建Join。在我的例子中,我使用'hasOne'导致Cakephp不使用hasMany与hasMne和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')));

就是这样。