Yii cdbcriteria选择关系的列

时间:2012-02-19 14:30:24

标签: php yii

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

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

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

错误:

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

3 个答案:

答案 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());

来源:CActiveRecord.with

  

为了动态定制选项,我们应该传递一个数组   with()方法的参数。数组键是关系名称,和   数组值是相应的查询选项。