Есть много отношений, как - PullRequest
0 голосов
/ 09 декабря 2011

У меня есть эта модель и контроллер, и он возвращается нормально, если это отношение hasOne, но теперь DishCategory имеет много блюд. Когда я изменяю приведенный ниже код на hasMany, он выдает ошибку, в которой говорится, что Dish.id не является известным столбцом, а если это hasOne, он работает нормально. Как я могу сделать так, чтобы он возвращал все Dish.id, которые имеют id = 1? (все еще используя соединение).

  class DishCategory extends AppModel{

               public $hasOne = array(
                'Dish' => array(
                    'className' => 'Dish',
                    'foreignKey' => 'dish_category_id'
                )
            );

     }

class DishCategoriesController extends AppController {

 function get_categories($id)
      { 
        // find category with a dish of $id
        $this->set('dishes', $this->DishCategory->find('all', array(
          'conditions' => array(
            'Dish.id' => $id
          )
        )));

        // set master layout
        $this->layout = 'master_layout';
      }     
  }

1 Ответ

0 голосов
/ 09 декабря 2011

hasOne отношения могут быть объединены в основной запрос SQL. hasMany отношения не могут и должны запрашиваться в отдельном запросе. conditions, указанное вами для запроса, применяется только к первичному запросу, все отдельные реляционные запросы строятся только на основе id s, полученных в первичном запросе. Установите debug равным 2 и внимательно изучите журнал запросов, чтобы понять, что я имею в виду.

Чтобы найти категорию блюда, возьмите блюдо и посмотрите на соответствующую запись категории:

$dish = $this->Dish->find('first', array('conditions' => array('Dish.id' => $id)));
echo $dish['DishCategory']['name'];

Поскольку я считаю, что блюдо belongsTo одна категория, ваш запрос "найти все категории, в которых есть блюдо с идентификатором x" не имеет смысла; в любом случае должен быть только один.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...