2012-05-15 2 views
0

Я пытаюсь получить строки моей модели с условием над двумя отношениями. Итак, у меня есть модель $ модель и два отношения:Yii два отношения MANY_MANY с лимитом

$ модель имеет MANY_MANY отношение к $ relation1 и $ relation1 имеет MANY_MANY отношение к $ relations2.

Я пытаюсь получить $ model, где $ relations2 равен '1'.

Так что я пробовал:

$model->with('relation1.relations2'=>array('alias'=>'v'))->findAll('v.id=1'); 

Это работает.

Но когда я пытаюсь добавить ограничение и смещение к FindAll:

$model->with('relation1.relations2'=>array('alias'=>'v'))->findAll('condition'=>'v.id=1', 'offset'=>0, 'limit'=>10); 

Он говорит, что он не может найти v псевдоним (потому что он пытается решить, что с двумя запросами, в противном случае ограничение не может применяться из-за отношения MANY_MANY).

Итак, на самом деле я вижу проблему ... Но как я могу ее решить?

+0

У вас есть строка журнала SQL? Пожалуйста, покажите это – Sergey

ответ

0

Попробуйте

$model->with('relation1'=>array('with'=>'relations2','alias'=>'v'))->findAll(array('condition'=>'v.id=1', 'offset'=>0, 'limit'=>10)); 
0

Вам нужно together property of CDbCriteria

$model->with(array('relation1.relations2'=>array('alias'=>'v')))->findAll('condition'=>'v.id=1', 'offset'=>0, 'limit'=>10, 
'together'=>true); 

Вы уже упомянули причину, которая два запроса формируется в то время как вам нужно один за предел, который может быть достигнут путем together ,

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