[英]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.