繁体   English   中英

Yii使用其他模型关系联接表

[英]Yii Joining a Table Using Another Models Relations

假设我们有三个表,“帖子”,“用户”和“图像”。 其中帖子与用户表有关系,而图像与用户表有关系,因此帖子属于用户,图像属于用户。

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中有没有办法做到这一点?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM