記事、著者、大学の 3 つのテーブルがあります。
テーブル記事用のグリッドを作っています。すべての記事は 1 人の著者に属し、すべての著者は 1 つの大学に属します。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:
CDbException
CDbCommand falhou ao executar o command SQL: SQLSTATE[42P01]: Undefined table:7 ERRO: faltando entrada para tabela "autor" na cláusula FROM 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)