итак, для начала - структура.
таблица №1 (tab1):
поля:
id
name
.. еще какие-то поля
таблица №2 (tab2):
поля:
id
id_tab1
created
value
.. еще какие-то поля
связь прописана: id_tab1 - ссылка на поле tab1.id
ЗАДАЧА.
выбрать записи из таблицы №1 (tab1), соответствующие выбранным полям и (если заполнено соответствующее поле) удовлетворяющие условию:
отсортировать tab2 по полю tab2.created в порядке убывания, выбрать первую запись (т.е. взять последнюю по времени запись в tab2) и проверить, соответствует ли у этой записи tab2.value определенному значению (поле на форме поиска).
задача осложняется тем, что база - oracle, соответственно лимитов нету, либо получить его можно только через одно место.
вариант решения №1.
писать запрос на чистом sql и использовать потом CSqlDataProvider
вариант не очень удобен.
вариант решения №2.
составляю запрос для поиска по tab1. за основу взял serch() сгенерированный gii crud
однако как добавить условие по подчиненной таблице - ума не приложу.
смотрел в сторону $criteria->with(), однако не смог осилить
Код: Выделить всё
public function search() {
// @todo Please modify the following code to remove attributes that should not be searched.
$criteria = new CDbCriteria;
$criteria->compare('id', $this->id);
$criteria->compare('поле', $this->поле);
// вот тут нужно добавить условие
return new CActiveDataProvider($this, array('criteria' => $criteria, ));
}
что скажите, дамы и господа?
может кто-то помочь в написании условия?