我有一个像
这样的查询$p = $this->Products->findById( $id )
->select(['name', 'description', 'category_id', 's.name', 'pp.price'])
->join([
'table' => 'sizes',
'alias' => 's',
'type' => 'INNER',
'conditions' => 's.category_id = Products.category_id',
])
->join([
'table' => 'products_prices',
'alias' => 'pp',
'type' => 'LEFT',
'conditions' => 'pp.size_id = s.id AND pp.product_id = Products.id',
]);
问题是,如果产品有10种不同的尺寸,将生成10行,并重复名称,描述,category_id元素
有没有办法重写它,所以大小的名称和价格作为子数组作为数组提供?
答案 0 :(得分:0)
也许只使用Containable而不是Join?您可以在产品和find()
尺码和ProductPrices上投放contain
。这将获得您正在寻找的数组/子数组。
唯一的缺点是,即使产品没有匹配的尺寸,它仍会拉动产品。
很难说出你真正想要的是什么,因为你加入的是category_id,但并没有真正引用它。也许如果你更详细地解释这个查询的目标是什么,我们可以提供一个更好的答案来解决这个问题。