簡體   English   中英

php - Yii2 ActiveQuery select joinWith 用於 ZDB974238714CA8DE634A7CE1D083A1

[英]php - Yii2 ActiveQuery select joinWith for API

我的客戶 model

public function getAddress() {
   return $this->hasMany(Address::className(), ['address_id' => 'address_id']);
}

我的客戶 controller

$query = Customer::find()
          ->alias(['a'])
          ->select(['a.*', 'b.address_name', 'b.address_longitude', 'b.address_latitude'])
          ->joinWith([address b])
          ->asArray()
          ->all()
return ["data" => $query];

結果:

{
  "data": [
     {
       "id": "123",
       "name": "abc",
       "address_name": "bcd",
       "address_logitude": "12312.1231",
       "address_latitude": "11232.11213",
       "address": []
     }
  ]
}

預期的

{
  "data": [
     {
       "id": "123",
       "name": "abc",
       "address": [
         "address_name": "bcd",
         "address_logitude": "12312.1231",
         "address_latitude": "11232.11213",
       ]
     }
  ]
}

請幫助我..我已經嘗試了幾天找到解決方案,但仍然沒有。 希望盡快找到解決方案。 :D

你期望的是急切的加載

您可以使用with()代替 joinWith():

$customers = Customer::find()
      ->alias(['a'])
      ->select(['a.*', 'b.address_name', 'b.address_longitude', 'b.address_latitude'])
      ->with([address b])
      ->all()

你必須改變getAddress()如下:

public function getAddress() {
 return $this->hasMany(Address::className(), ['address_id' => 'id']);
}

要生成此數組,您可以執行以下操作:

$result = [];
foreach($customers as $customer) {
   $result['data'][] = [
      "id" => $customer->id,
      "name" => $customer->name,
      "address"=> [
         "address_name" => $customer->address->name,
          ...
      ]
   ]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM