使用其他模型关系连接表


Yii Joining a Table Using Another Models Relations

假设我们有三个表,Posts, Users和Images。其中post与users表有关系,image与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,我可以使用CDbCriteria和'with'函数来查询这个。我的问题是如何查询Post模型,并使用Users模型内部的关系来获取用户图像?

的例子:

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

在Yii中是否有实现这一点的方法?

您可以在Users模型中使用defaultScope使其始终连接到images模型:

public function defaultScope()
{
    return array(
        'with'=> array("images")
    );
}

我想这可能是一个'Doh…’,但是从Posts模型到Users模型的关系命名为user,而不是Users。with()函数指向的是关系,而不是模型。