php - Yii2 ActiveQuery select joinWith for API
php - Yii2 ActiveQuery select joinWith for API
我的客户模型
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
你期望的是 eager loading.
您可以使用 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,
...
]
]
}
我的客户模型
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
你期望的是 eager loading.
您可以使用 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,
...
]
]
}