0

有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:

CDb异常

CDbCommand falhou ao executar o comando SQL: SQLSTATE[42P01]: Undefined table:7 ERRO: faltando entrada para tabela "autor" na cláusula FROM LINE 1: ..."autor"."universidade_id"="universidade"."id" ) 哪里(自动...

^.执行的 SQL 语句为 SELECT COUNT(DISTINCT 't'.'id') FROM "artigo" 't' LEFT OUTER JOIN 'autor' 'auto' 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 回答
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);
于 2013-09-23T17:05:52.033 回答