#cakephp #cakephp-1.3
#cakephp #cakephp-1.3
Вопрос:
У меня есть оператор contain, который выглядит следующим образом:
$this->Wijken->contain(array(
'Theme' => array(
'Polygon' => array(
'PolygonPoint'
)
)
));
Таблица Polygon содержит (среди прочих) поля ‘theme_id’ и ‘wijk_id’ (которые являются первичным ключом Wijken).
Я хочу извлекать только те полигоны, которые соответствуют wijk_id.
Итак, на мой взгляд, это было бы достигнуто путем добавления следующего в массив Polygon-array:
'conditions' => array('wijk_id' => $this->Wijken.id)
Однако это не работает. Когда я жестко кодирую значение равным 1, это работает, и я получаю только полигоны для wijk # 1.
Итак, мой вопрос в том, как вы можете использовать переменную родительской модели (Wijken) в переменной условий другой модели (Polygon). Или мне следует добавить специальные правила к моим моделям?
Ответ №1:
Передавайте параметры contain при выполнении вызова функции find() вместо этого. Это позволит вам динамически передавать идентификатор Wijken. ie:
function view($id) {
// assuming $id param is a wijken id
$contain = array(
'Theme' => array(
'Polygon' => array(
'conditions' => array('Polygon.wijk_id' => $id),
'PolygonPoint'
)
)
);
$conditions = array('Wijken.id' => $id);
$wijken = $this->Wijken->find('first', array('contain'=>$contain, 'conditions'=>$conditions));
}
Комментарии:
1. Wijken.id не обязательно фильтровать. Что я хочу, так это весь Wijken с соответствующими темами и полигонами.. где полигонам требуется wijken.id условие (wijk_id в их таблице).
2. Это то, что даст вам приведенный выше код. Просто выполните поиск(‘all’, array(‘contain’=>$contain)