选择从查询
问题描述:
只期望firleds我有许多人sizes
和toppings
和之间有许多关系,有一个包含额外的字段的表被命名为toppings_sizes
选择从查询
现在我想从toppings_sizes
只选择一个字段thrird表,目前我有一个查询提供了所有3个表中的所有可用字段。
$rs = $this->Toppings
->find()
->contain(['Sizes'])
->where(['category_id' => $categoryId]);
debug(json_encode($rs, JSON_PRETTY_PRINT));
我这个,我可以只需要2场Sizes.name
和ToppingsSizes.price
答
一种方式是通过将->select
指定字段:
$rs = $this->Toppings
->find()
->select(['Sizes.name', 'ToppingsSizes.price'])
->contain(['Sizes'])
->where(['category_id' => $categoryId]);
答
$rs = $this->Toppings
->find()
->contain([
'Sizes' => function ($q) {
return $q
->select(['name']);
},
'ToppingsSizes' => function ($q) {
return $q
->select(['price']);
}
]);
->where(['category_id' => $categoryId]);
通过使用此代码,你可以得到所需的表中的字段。
答
您需要将关系模型名称传递给contain()
方法数组,该模型数据是您在结果数据中需要的模型实体。
$rs = $this->Toppings
->find()
->select(['Sizes.name', 'ToppingsSizes.price'])
->contain(['Sizes','ToppingsSizes'])
->where(['Toppings.category_id' => $categoryId]);