Модель Platform
Код: Выделить всё
public function relations()
{
return [
'cas_p_g_h' => [self::HAS_MANY, 'Cas_p_g_h', 'p_id']
];
}
Код: Выделить всё
$platforms = Platform::model()->with(
[
'cas_p_g_h' => [
'condition' => 'h_id=1'
]
]
)->findAll();
SELECT `t`.`p_id` AS `t0_c0`, `t`.`name` AS `t0_c1`, `t`.`alias` AS `t0_c2` FROM `platform` `t` LEFT OUTER JOIN `cas_p_g_h` `cas_p_g_h` ON (`cas_p_g_h`.`p_id`=`t`.`p_id`) WHERE (h_id=1)
При:
Код: Выделить всё
$platforms = Platform::model()->with(
[
'cas_p_g_h' => [
'scopes' => [
'applyHost' => 1
]
]
]
)->findAll();
Код: Выделить всё
public function applyHost($host)
{
$this->getDbCriteria()->mergeWith(array(
'condition'=>'host=:host',
'params'=>array(':host'=>$host),
));
return $this;
}
Генерирует такой запрос:
SELECT `t`.`p_id` AS `t0_c0`, `t`.`name` AS `t0_c1`, `t`.`alias` AS `t0_c2` FROM `platform` `t` LEFT OUTER JOIN `cas_p_g_h` `cas_p_g_h` ON (`cas_p_g_h`.`p_id`=`t`.`p_id`) AND (h_id=1)
Ключевой момент в первом варианте WHERE во втором AND. Такое поведение портит всю малину.
Объясните, пожалуйста это баг или плохое чтение документации(использование scope)
Есть 2 таблицы. В одной названия платформ. В другой связь платформа-хост. Запрос выдает правильный результат только при использовании "condition" непосредственно в массиве параметров. При использовании scope — результат содержимое таблицы Platform.