2016-08-16 109 views
0

只期望firleds我有许多人sizestoppings和之间有许多关系,有一个包含额外的字段的表被命名为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.nameToppingsSizes.price

回答

0

一种方式是通过将->select指定字段:

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

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

通过使用此代码,你可以得到所需的表中的字段。

0

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

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