我很难在Yii中给出的博客演示中选择所有帖子的用户名。
作者是帖子类与用户的关系......
$criteria = new CDbCriteria;
$criteria->with='author';
$criteria->select='author.username';
$dataProvider=new CActiveDataProvider('Post', array(
'criteria' => $criteria,
));
var_dump($dataProvider->getData());
错误:
活动记录“发布”正在尝试选择无效的列“author.username”。请注意,该列必须存在于表中,或者是具有别名的表达式。
答案 0 :(得分:8)
with
所做的是eager loading
..这意味着关系的数据 也将从数据库加载,当你打电话给 关系,不会有实际的查询..它从数据库中选择它并将其映射到模型 可变..
现在你正在发生的事情是你正在尝试在select中编写一些关系列,即使没有编写它也会在select中存在,但由于没有相应的变量来映射这个值yii是抛出错误..
首先,如果你需要auther的用户名作为响应,你可以通过关系调用得到它,这不是数据库调用,你不需要写一个选择..
如果您想将用户名作为帖子模型的一部分进行调用,只需您必须将其声明为模型中的属性,然后在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());
并在你的Post模型声明..
public $auther_username;
现在它不会抛出错误,您可以通过两种方式访问用户名.. $post->auther_username
和$post->auther->username
答案 1 :(得分:1)
试试这个:
$criteria = new CDbCriteria;
$criteria->with=array('author'=>array('select'=>'username'));
// you can still select Post table columns here
$criteria->select='post_content';
$dataProvider=new CActiveDataProvider('Post', array(
'criteria' => $criteria,
));
var_dump($dataProvider->getData());
答案 2 :(得分:1)
试试这个:
$criteria = new CDbCriteria;
$criteria->with=array('author'=>array('select'=>'username'));
$dataProvider=new CActiveDataProvider('Post', array(
'criteria' => $criteria,
));
var_dump($dataProvider->getData());
为了动态定制选项,我们应该传递一个数组 with()方法的参数。数组键是关系名称,和 数组值是相应的查询选项。