从数据库中的多态关系中选择字段
Selecting fields from polymorphic relationship in DB
我有一个 Order
模型,与 Parent
和 School
具有多态客户关系。我现在的目标是查询订单并生成包含客户 name
和 email
的报告。 name
和 email
字段都出现在 Parent
和 School
中。
Order
有:
public function customer()
{
return $this->morphTo();
}
Parent
和 School
都有:
public function orders()
{
return $this->morphMany(Order::class, 'customer');
}
我目前的查询是:
$result = Order::query()
->with('customer')
->select(
'orders.id',
'amount'
)->get();
dd($result->first()->toArray());
结果是:
array:6 [▼
"id" => 1
"amount" => "42.00"
"customer" => null
]
我认为可以在所选字段列表中添加 customer.name
和 customer.email
,但 Eloquent 抱怨找不到客户字段 customer.name
有道理吗?
如何获取相关模型中的数据?
对于Laravel 8,可以看到linkhere。
那么,您的代码将是:
$result = Order::whereHasMorph(
'orderable', // this is your polymorphic relationship you define
[Parent::class, School::class], // your list of Models you want to query from the polymorphic relationship
function (Builder $query) {
$query->select('name', 'email');
}
)->get();
应该可以了。
我有一个 Order
模型,与 Parent
和 School
具有多态客户关系。我现在的目标是查询订单并生成包含客户 name
和 email
的报告。 name
和 email
字段都出现在 Parent
和 School
中。
Order
有:
public function customer()
{
return $this->morphTo();
}
Parent
和 School
都有:
public function orders()
{
return $this->morphMany(Order::class, 'customer');
}
我目前的查询是:
$result = Order::query()
->with('customer')
->select(
'orders.id',
'amount'
)->get();
dd($result->first()->toArray());
结果是:
array:6 [▼
"id" => 1
"amount" => "42.00"
"customer" => null
]
我认为可以在所选字段列表中添加 customer.name
和 customer.email
,但 Eloquent 抱怨找不到客户字段 customer.name
有道理吗?
如何获取相关模型中的数据?
对于Laravel 8,可以看到linkhere。
那么,您的代码将是:
$result = Order::whereHasMorph(
'orderable', // this is your polymorphic relationship you define
[Parent::class, School::class], // your list of Models you want to query from the polymorphic relationship
function (Builder $query) {
$query->select('name', 'email');
}
)->get();
应该可以了。