Записи без связянных объектов

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Grigory
Сообщения: 47
Зарегистрирован: 2011.09.30, 04:30

Записи без связянных объектов

Сообщение Grigory » 2013.07.17, 05:18

Здравствуйте!

Есть модель

Код: Выделить всё

class Rooms extends CActiveRecord{
   
    ...
        
    public function relations(){
        return array(
            'ptrans'=>array(self::HAS_MANY, 'Periods', 'fk_room', 
                'condition'=>'
                    ptrans.arrive<:mbegin && 
                    ptrans.depart>:mend
                '
            )
         );
     }
}
 
Как запросить все записи Rooms имеющие и не имеющие связанные объекты?

Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Записи без связянных объектов

Сообщение lancecoder » 2013.07.17, 05:50

Код: Выделить всё

array(
'condition' => 'ptrans.fk_room IS NULL'
//'condition' => 'ptrans.fk_room IS NOT NULL'
) 

Grigory
Сообщения: 47
Зарегистрирован: 2011.09.30, 04:30

Re: Записи без связянных объектов

Сообщение Grigory » 2013.07.17, 06:34

Спасибо.

Grigory
Сообщения: 47
Зарегистрирован: 2011.09.30, 04:30

Re: Записи без связянных объектов

Сообщение Grigory » 2013.07.17, 07:25

Только сейчас заметил, что не помогло. Когда задаю связь

Код: Выделить всё

public function relations(){
            return array(
                'ptrans'=>array(self::HAS_MANY, 'Periods', 'fk_room',
                    'condition'=>'(ptrans.arrive<:mbegin && 
                        ptrans.depart>:mend) ||
                        ISNULL(ptrans.fk_room)
                    '
                ),
 
То в Rooms включаются только те записи которые имеют пустым поле fk_room в связанной таблице.
Если задаю связь так:

Код: Выделить всё

public function relations(){
            return array(
                'periods'=>array(self::HAS_MANY, 'Periods', 'fk_room'),
                'ptrans'=>array(self::HAS_MANY, 'Periods', 'fk_room', 
                    'condition'=>'
                        (ptrans.arrive<:mbegin && 
                        ptrans.depart>:mend) ||
                        ISNULL(ptrans.fk_room) ||
                        !ISNULL(ptrans.fk_room)
                    '
                ),
}
 
То в Rooms включаются все записи и даже те, которые не удовлетворяют условию (ptrans.arrive<:mbegin && ptrans.depart>:mend).

Grigory
Сообщения: 47
Зарегистрирован: 2011.09.30, 04:30

Re: Записи без связянных объектов

Сообщение Grigory » 2013.07.17, 10:33

Реши проблему так

Код: Выделить всё

...
public function relations(){
            return array(
                'ptrans'=>array(self::HAS_MANY, 'Periods', 'fk_room', 
                    'on'=>'
                        ptrans.arrive<:mbegin && 
                        ptrans.depart>:mend
                    '
                )
}
 
Связанные объекты отсеялись по условию, а записи без связанных объектов остались с пустыми массивами.

Ответить