Yii使用另一种模型关系加入表

时间:2013-06-06 15:46:45

标签: php frameworks yii

我们说有三个表,帖子,用户和图片。帖子与users表有关系,且images与用户表有关系,因此帖子属于用户,图像属于用户。

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 Model,并使用Users模型中的关系来获取用户图像?

示例:

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

Yii有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

相关问题