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. Только вернемся к рассмотрению этого. Спасибо.