【问题标题】:Yii Joining a Table Using Another Models RelationsYii 使用另一个模型关系加入表
【发布时间】:2013-06-06 15:46:45
【问题描述】:

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

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 中实现这一点?

【问题讨论】:

  • 我认为,您发布的代码将不起作用。 PostsImages 中的 user 关系必须是 BELONGS_TO
  • 当然,我模拟了这个例子,但这个想法在另一个模型上的连接上保持不变
  • 嗯,它确实有所作为。如果它真的是HAS_ONE,您可以使用through 功能。但它不适用于BELONGS_TO

标签: php frameworks yii


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多