Использовать данные родительской модели в другой модели через contains() и условия, в CakePHP

#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)