Yii cdbcriteria选择关系的列

use*_*655 7 php yii

我很难在Yii中给出的博客演示中选择所有帖子的用户名.

作者是帖子类与用户的关系......

$criteria = new CDbCriteria;
$criteria->with='author';
$criteria->select='author.username';
$dataProvider=new CActiveDataProvider('Post', array(
    'criteria' => $criteria,
));
var_dump($dataProvider->getData());
Run Code Online (Sandbox Code Playgroud)

错误:

活动记录"发布"正在尝试选择无效的列"author.username".请注意,该列必须存在于表中,或者是具有别名的表达式.

Raj*_*hal 8

什么witheager loading..这意味着关系的数据也会随着数据库一起加载,当你调用关系时,就不会有实际的查询.

选择什么是从数据库中选择它并将其映射到模型变量..

现在在你的情况下发生的事情是你正在尝试在select中编写一些关系列,即使没有编写它也会在select中存在,但由于没有相应的变量来映射这个值,所以yii会抛出一个错误.

首先,如果您需要auther的用户名作为响应,您可以通过关系调用来获取它,这不是数据库调用,并且您不需要编写选择..

如果你想将用户名作为post模型的一部分调用,你必须将它声明为模型中的属性,然后在select中指定别名.

$criteria = new CDbCriteria;
$criteria->with='author';
$criteria->select='author.username as auther_username';
$dataProvider=new CActiveDataProvider('Post', array(
    'criteria' => $criteria,
));
var_dump($dataProvider->getData());
Run Code Online (Sandbox Code Playgroud)

并在你的Post模型声明..

public $auther_username;
Run Code Online (Sandbox Code Playgroud)

现在它不会抛出错误,你可以通过两种方式访问​​用户名.. $post->auther_username,和$post->auther->username