Выбор полей из полиморфных отношений в БД

laravel #eloquent #polymorphic-relationship

#laravel #красноречивый #полиморфные отношения

Вопрос:

У меня есть Order модель с полиморфным отношением клиента к Parent и School . Теперь моя цель — запросить заказы и сгенерировать отчет, включающий name и email клиента. Оба name email поля and присутствуют в Parent and 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 customer.name не может быть найдено, что имеет смысл?

Как мне получить данные в связанных моделях?

Ответ №1:

Для Laravel 8 вы можете увидеть ссылку здесь.

Тогда ваш код будет:

 $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();
 

Это должно сделать это.

Комментарии:

1. Только вернемся к рассмотрению этого. Спасибо.