我很难在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".请注意,该列必须存在于表中,或者是具有别名的表达式.
什么
with是eager 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