Yii CListView搜索子查询

时间:2013-11-18 17:55:36

标签: php sql yii

我正在使用CListView在页面上显示我的数据。我有一个用于在查询中搜索关键字的文本框。

在我构建我的CActiveDataProvider的查询中,我有一些子查询。例如:

$criteria = new CDbCriteria;
$criteria->select = array('
    Lessons.id,
    Lessons.name,
    (SELECT
        COALESCE(CONCAT(u.first_name, " ", u.last_name), last_name, first_name)
    FROM
        users AS u
    WHERE
        u.user_token = Lessons.instructor_id
    ) as instructor_name
');

我的上述查询模型确实有一个名为$ instructor_name的类变量。

当我在文本框中输入数据时,我运行这段代码加入另一个表进行搜索。

if ( !empty($query) ) {
    $criteria->with = array('packages');
    $criteria->compare( 'packages.contents', $query, true);
    $criteria->together = true;
}

运行搜索查询时的结果不会从子查询返回instructor_name数据。

有关此处发生的事情的任何想法,以防止我的子查询数据加载?先感谢您。

1 个答案:

答案 0 :(得分:0)

要以更多CActiveRecord方式执行此操作(并获取您要查找的结果),请尝试以下操作:

1 - 将讲师关系添加到引用User表的Lesson模型(所以现在你可以做$ lesson->讲师)

'instructor'=>array(self::BELONGS_TO, 'User', 'instructor_id'),

2 - 在Lesson :: search()方法的select子句中添加一个列/表达式,表示连接的instructor_name - 类似于:

$criteria->select = array('
Lessons.id,
Lessons.name,
COALESCE(CONCAT(instructor.first_name, " ", instructor.last_name), last_name, first_name) AS instructor_name
...etc

3 - 将教师添加到搜索条件的“with”部分,以便将教师信息加入查询

$criteria->with = array('packages', 'instructor');