php - Yii2 ActiveQuery select joinWith для API - PullRequest
0 голосов
/ 05 мая 2020

модель моего клиента

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

мой контроллер клиента

$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

1 Ответ

0 голосов
/ 05 мая 2020

то, что вы ожидаете, это активная загрузка .

Вы можете использовать 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,
          ...
      ]
   ]
}
...