0

記事、著者、大学の 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)

4

2 に答える 2

0

これは少し奇妙に見えます:

return array( array('author.name, university.name, ... ', 'safe', 'on'=>'search'),

これらの属性名のルールは、独自のクラスにあるはずです。モデルクラスで別のモデルの検証ルールを定義できるとは思いません。これにより、Yii は「author.name」というデータベース列があると考えるようになると思います。

また:

あなたはこのコードを持っています:

'$data->university->author->nome'. そうではない->nameでしょうか?

あなたの母国語でもエラーを追加してください。

于 2013-09-20T03:05:28.247 に答える