我有一个查询,我正在使用连接管理器直接执行,如
$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');
在这种情况下,Sizes
和Toppings
具有多对多的关系,并且关联是按照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]);