dimasnake
(Dmitriy2406)
April 9, 2010, 3:04pm
1
Не происходит JOIN таблицы.
Связи в модели Club
public function relations()
{
return array(
'areas'=>array(self::MANY_MANY,'Area','club2area(club, area)'),
);
}
Если в контроллере не использовать limit, все работает отлично, если вставляю limit JOIN не происходит. Или если один limit без condition работает нормально.
$model=Club::model()->with('areas')->findAll(array(
//'limit'=>1,
'condition'=>'areas.id=:area',
'params'=>array(':area'=>$_REQUEST['area']),
));
Та же проблема с CActiveDataProvider… Здесь просто join не происходит.
$dataProvider=new CActiveDataProvider('Club', array(
'criteria'=>array(
'with'=>array('areas' ),
'condition'=>'areas.id=:area',
'params'=>array(':area'=>$_REQUEST['area']),
),
'pagination'=>array( 'pageSize'=>Yii::app()->params['PerPage'] ),
));
creocoder
(Creocoder)
April 9, 2010, 6:36pm
2
Попробуйте так:
$model=Club::model()->with(array(
'areas'=>array(
'condition'=>'areas.id=:area',
'params'=>array(':area'=>$_REQUEST['area']),
)
))->findAll(array(
'limit'=>1,
));
Дело в том, что появление limit разбивает запрос такого плана на две штуки, поэтому condition у вас попадает не в тот запрос в который должен.
dimasnake
(Dmitriy2406)
April 10, 2010, 3:25pm
3
creocoder:
Попробуйте так:
$model=Club::model()->with(array(
'areas'=>array(
'condition'=>'areas.id=:area',
'params'=>array(':area'=>$_REQUEST['area']),
)
))->findAll(array(
'limit'=>1,
));
Дело в том, что появление limit разбивает запрос такого плана на две штуки, поэтому condition у вас попадает не в тот запрос в который должен.
Спасибо. Помогло.
Еще одно решение добавить together
$model=Club::model()->with('areas')->together()->findAll(array(
'limit'=>1,
'condition'=>'areas.id=:area',
'params'=>array(':area'=>$_REQUEST['area']),
));
Для CActiveDataProvider помогло расширение как показано здесь http://www.yiiframework.com/forum/index.php?/topic/7420-undestanding-relational-queries-with-cactivedataprovider/