2013-11-18 4 views
0

Я использую CListView для отображения моих данных на странице. У меня есть текстовое поле для поиска ключевых слов в запросе.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 
'); 

В моей модели для вышеуказанного запроса есть переменная класса с именем $ instructionor_name.

Когда я ввожу данные в текстовое поле, я запускаю этот фрагмент кода, чтобы присоединиться к другой таблице для поиска.

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

Результаты при выполнении поискового запроса не возвращают данные инструктора из подзапроса.

Любые идеи о том, что здесь происходит, чтобы предотвратить загрузку данных моего подзапроса? Заранее спасибо.

ответ

0

Чтобы сделать это в более CActiveRecord пути (и получить ваши результаты ищут), попробуйте следующее:

1 - Добавить инструктор отношение к уроку модели, которая ссылается на таблицу пользователей (так что теперь вы сможете сделать $ lesson-> инструктор)

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

2 - Добавить столбец/выражение в статье выберите в вашем уроке :: поиска() метод, который представляет собой каскадный 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 - Добавить инструктор в «с» части критериев поиска, так что информация инструктор вступил в запрос

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

То, что я, кажется, найти то, когда я добавить значение к с частью поиска критерии. , например. '$ criteria-> with = array ('инструктор');' Выполняемый мной SQL-запрос не учитывает исходное значение выбора. Таким образом, стирание подзапроса для использования Yii по умолчанию. – Shawn

+0

Выполняя это так, вам не нужен подзапрос, так как столбцы соединены в него, а затем формула используется для вычисления поля имя_пользователя. – PrplHaz4

Смежные вопросы