簡體   English   中英

Yii CListView搜索與子查詢

[英]Yii CListView Search with Subqueries

我正在使用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;
}

運行搜索查詢時的結果不會從子查詢中返回講師名稱數據。

有什么想法可以防止子查詢數據加載? 先感謝您。

要以更CActiveRecord的方式執行此操作(並獲得所需的結果),請嘗試以下操作:

1-將教員關系添加到引用User表的Lesson模型中(因此現在您可以執行$ lesson-> instructor)

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

2-在您的Lesson :: search()方法的select子句中添加一列/表達式,該字符串/表達式表示串聯的教師名稱-類似:

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

3-將講師添加到搜索條件的“具有”部分,以便將講師信息加入查詢中

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM