有3张桌子 文章,作者和大学
我正在为桌面文章制作网格。每篇文章都属于一位作者,每位作者都属于一所大学。我需要显示University.name |作者姓名|制品。*
在管理员视图
$gridWidget=$this->widget('bootstrap.widgets.TbGridView',array(
'id'=>'dados-cd-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'author_name'=>array(
'name' => 'author_name',
'value' => '$data->author->name'
),
'university_name'=>array(
'name' => 'university_name',
'value' => '$data->university->author->name'
),
...
array(
'class'=>'bootstrap.widgets.TbButtonColumn',
),
),
));
在文章模型中我有
public $author_name;
public $university_name;
public function rules()
{
...
return array(
array('author.name, university.name, ... ', 'safe', 'on'=>'searc
h'),
...
);
}
public function search()
{
$criteria=new CDbCriteria;
$criteria->with = array( 'author','author.university' );
$criteria->compare('author.name',$this->author_name,true);
$criteria->compare('university.name',$this->university_name,true);
...
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
'sort'=>array(
'attributes'=>array(
'author_name'=>array(
'asc'=>'author.name',
'desc'=>'author.name DESC',
),
'university_name'=>array(
'asc'=>'university.name',
'desc'=>'university.name DESC',
),
'*',
),
),
));
}
网格工作正常。但是当我尝试通过author_name搜索或订购时,我收到了一条错误消息。我将尝试从葡萄牙语翻译错误消息,但我不知道它是否像英语中那样:“未定义的表:7错误:缺少表格作者的条目”
有趣的是,大学搜索和订单工作得很好。我看不出它们之间的差异。
任何人都可以帮助我?
我已经检查过数据库中的列名是否真的是“名称” 在错误消息中,它显示的部分查询是“(WHERE author.name LIKE ycp0)”。我认为这是我的问题的关键,但我不确切知道如何。
错误讯息 错误500:
CDbCommand falhou ao executar o comando SQL:SQLSTATE [42P01]:未定义的表:7 ERRO:faltando entrada para tabela“autor”nacláusula来自LINE 1:...“autor”。“universidade_id”=“universidade”。 “id”)WHERE(自动...
^。执行的SQL语句是SELECT COUNT(DISTINCT't'。'id')FROM“artigo”'t'LEFT OUTER JOIN'autor''autor'ON('t'。'artigo'。'autor_id '='autor'。'id')LEFT OUTER JOIN'universidade''universidade'ON('autor'。'universidade_id'='universidade'。'id')WHERE(autor.nome LIKE:ycp0)
答案 0 :(得分:0)
这看起来有点奇怪:
return array(
array('author.name, university.name, ... ', 'safe', 'on'=>'search'),
我猜这些属性名称的规则应该在他们自己的类中。我不认为您可以为模型类中的另一个模型定义验证规则。我想这会让Yii认为有一个名为'author.name'的数据库专栏。
此外:
你有这个代码:
'$data->university->author->nome'
。不应该是->name
吗?
请在您看到的语言中添加您的母语错误。
答案 1 :(得分:0)
找到它!!!
我使用'“table”。“column”'并且有效。我不明白为什么它在没有大学的情况下有效,但作者需要。但是我也把“”放在大学里并且仍在工作,所以我相信使用“”是正确的方法。
感谢所有试图帮助我的人。天堂属于你们。 < 3
//排序
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
'sort'=>array(
'attributes'=>array(
'author_name'=>array(
'asc'=>'"author"."name"',
'desc'=>'"author"."name" DESC',
),
'university_name'=>array(
'asc'=>'university.name',
'desc'=>'university.name DESC',
),
'*',
),
),
//搜索
$criteria->compare('"author"."name"',$this->author_name,true);
$criteria->compare('university.name',$this->university_name,true);