я новичок в Laravel и столкнулся с интересной проблемой прямо сейчас в моем приложении. У меня есть 3 таблицы.
Производители
Типы
Модели
- идентификатор
- имя модели
- device_type_id
- device_producer_id
В моей модели производителей я определил следующий метод фильтра:
public function scopeFilterByType($query, $type_id)
{
$query->whereHas('models', function($q) use $type_id { $q->where('device_type_id', $type_id );});
}
Используя Tinker, я могу сделать следующее:
App\DeviceProducer::filterByType(3)->get()
И получить полный ответ с моими производителями, связанными с моими данными type.
Я создал функцию, чтобы при выборе пользователем типа устройства Ajax загружались все производители этого типа.
public function reqProducer(Request $request)
{
$producers = DeviceProducer::filterByType($request->type_id)->get();
return response()->json( $producers );
}
Но когда AJAX вызывает мою конечную точку, это получает ошибку HTTP500.
Я понял, когда использовал запрос без WhereHas, например:
$producers = DeviceProducer::where('id', $request->producer_id)->get();
Он просто отлично работает, и я получаю свои результаты. Так что, похоже, надо что-то делать с «Где». Я знаю, что мог бы решить эту проблему, сначала запросив таблицу моделей и создав Foreach l oop. Но я это решение было бы менее читабельным, чем моя первая попытка.
У кого-нибудь есть предложения, что я делаю неправильно, или это просто, как будто noch AJAX поддерживает запросы WhereHas?
С уважением, Майк