从数据库中的多态关系中选择字段

Selecting fields from polymorphic relationship in DB

我有一个 Order 模型,与 ParentSchool 具有多态客户关系。我现在的目标是查询订单并生成包含客户 nameemail 的报告。 nameemail 字段都出现在 ParentSchool 中。

Order 有:

public function customer()
{
    return $this->morphTo();
}

ParentSchool 都有:

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.namecustomer.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();

应该可以了。