有很多关系如何

时间:2011-12-08 23:14:43

标签: cakephp

我有这个模型和控制器,如果它是一个hasOne关系它返回正常,但现在DishCategory有很多菜。当我将下面的代码更改为hasMany时,它给出了一个错误,说Dish.id不是已知的列,而如果它是一个hasOne则可以正常工作。我怎样才能使它返回所有具有id = 1的Dish.id? (仍在使用加入)。

  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 :(得分:0)

hasOne关系可以加入主SQL查询。 hasMany关系不能也不需要在单独的查询中查询。您为查询指定的conditions仅适用于主查询,所有单独的关系查询都是基于主查询中检索到的id构建的。将debug设置为2并仔细查看查询日志以查看我的意思。

要查找菜肴的类别,请取出菜肴并查看其相关的类别记录:

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

因为我认为这是一个belongsTo一个类别,你的查询“找到所有带有id x 的菜肴的类别都没有意义;反正应该只有一个。