2016-08-16 147 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]);