Cakephp 3 queryBuilder为多对多关系

时间:2016-08-16 14:27:00

标签: cakephp cakephp-3.0

我有一个查询,我正在使用连接管理器直接执行,如

$connection = ConnectionManager::get('default');

$sizes = $connection->execute('SELECT s.name size_name, s.id size_id, tp.price
         FROM toppings t
         INNER JOIN `sizes` s on s.category_id =  t.category_id
         LEFT JOIN `toppings_prices` tp ON tp.topping_id = t.id AND tp.size_id = s.id
         WHERE t.id= :id', ['id' => $id])->fetchAll('assoc');

在这种情况下,SizesToppings具有多对多的关系,并且关联是按照ToppingTable中的CakePHP 3文档定义的,我已经定义了像

这样的关系
$this->belongsToMany('Sizes', [
      'foreignKey' => 'topping_id',
      'targetForeignKey' => 'size_id',
      'joinTable' => 'toppings_prices'
    ]);

上述查询在ToppingsController的编辑方法中定义。 是否有更好的方法来获得与上述查询相同的结果?

我已经尝试过CakePHP标准,它返回了我实际上不想要的所有3个表中的所有可能字段

$rs = $this->Toppings
     ->find()
     ->contain(['Sizes'])
     ->where(['category_id' => $categoryId]);

0 个答案:

没有答案