从查询中仅选择所需的firled

时间:2016-08-16 15:57:27

标签: cakephp cakephp-3.0

我在sizestoppings之间存在多对多关系,并且有一个包含额外字段的表格toppings_sizes

现在我只想从toppings_sizes中选择一个字段,目前我的查询提供了所有3个表中的所有可用字段。

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

debug( json_encode($rs, JSON_PRETTY_PRINT));

我这可以只需要2个字段Sizes.nameToppingsSizes.price

3 个答案:

答案 0 :(得分:0)

一种方法是添加->select来指定字段:

$rs = $this->Toppings
    ->find()
    ->select(['Sizes.name', 'ToppingsSizes.price'])
    ->contain(['Sizes'])
    ->where(['category_id' => $categoryId]);

答案 1 :(得分:0)

$rs = $this->Toppings
    ->find()
    ->contain([
            'Sizes' => function ($q) {
               return $q
                    ->select(['name']);

            },
            'ToppingsSizes' => function ($q) {
               return $q
                    ->select(['price']);
            }
        ]);
    ->where(['category_id' => $categoryId]);

通过使用此代码,您可以从表中获得所需的字段。

答案 2 :(得分:0)

您需要将关系模型名称传递给contain()方法数组,该数组是结果数据中所需的模型实体。

$rs = $this->Toppings
    ->find()
    ->select(['Sizes.name', 'ToppingsSizes.price'])
    ->contain(['Sizes','ToppingsSizes'])
    ->where(['Toppings.category_id' => $categoryId]);