0

假设我们有三个表,帖子、用户和图像。其中post与users表有关系,images与user表有关系,即post属于用户,image属于用户。

Post {
    post_id
    user_id
}

Users {
     user_id
}

Images {
    image_id
    user_id
}

现在在 Yii 中,可以在模型中定义关系。我的关系是这样设置的:

<?php

class Users extends CModel {
    public function relations() {
      'images' => array(self::HAS_ONE, 'Images', 'user_id')
      'posts' => array(self::HAS_MANY, 'Posts', 'user_id')
    }
}

class Images extends CModel {
    public function relations() {
      'user' => array(self::HAS_ONE, 'Users', 'user_id')
    }
}

class Posts extends CModel {
    public function relations() {
      'user' => array(self::HAS_ONE, 'Users', 'user_id')
    }
}

现在在 Yii 中,使用 DBCriteria 我可以使用带有 'with' 函数的 CDbCriteria 来查询这个。我的问题是如何查询 Post 模型,并使用 Users 模型中的关系来获取用户图像?

例子:

CActiveDataProvider('Posts', array(
            'criteria'=>array(
                'with' => array('users', 'Users.images'),
            ),
            'pagination'=>array(
                'pageSize'=>20,
            ),
        ));

在 Yii 中有没有办法做到这一点?

4

2 回答 2

1

您可以在模型中使用 defaultScopeUsers以使其始终加入images模型:

public function defaultScope()
{
    return array(
        'with'=> array("images")
    );
}
于 2013-06-06T15:55:07.627 回答
0

我认为这对您来说可能是一个“Doh ...”时刻,但是 Posts 模型与 Users 模型的关系被命名为 user 而不是 users。with() 函数指的是关系而不是模型。

于 2013-06-07T14:14:31.177 回答