Laravel6 WhereHas Ошибка 500 при использовании AJAX - PullRequest
0 голосов
/ 15 января 2020

я новичок в Laravel и столкнулся с интересной проблемой прямо сейчас в моем приложении. У меня есть 3 таблицы.

Производители

  • id
  • имя_производителя

Типы

  • id
  • имя типа

Модели

  • идентификатор
  • имя модели
  • 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?

С уважением, Майк

1 Ответ

0 голосов
/ 15 января 2020

Я думаю, что это ваша проблема use $type_id

Пожалуйста, исправьте как

public function scopeFilterByType($query, $type_id)
{
  $query->whereHas('models', function($q) use ($type_id) { $q->where('device_type_id', $type_id );});
}
...