Laravel6使用AJAX时出现错误500

时间:2020-01-15 09:17:04

标签: ajax laravel laravel-6 http-status-code-500 wherehas

我是Laravel的新手,现在在我的App中面临一个有趣的问题。 我有3张桌子。

生产者

  • id
  • producer_name

类型

  • id
  • type_name

模型

  • id
  • 型号名称
  • device_type_id
  • device_producer_id

在生产者模型中,我定义了以下Filter方法:

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

使用修补匠,我可以执行以下操作:

App\DeviceProducer::filterByType(3)->get()

并获得与我的给定类型相关的我的生产者的完整响应。

我创建了一个函数,以便当用户选择设备类型时,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();

一切正常,我得到了结果。因此,似乎必须对“ WhereHas”进行处理。我知道我可以通过首先询问Models Table并创建一个Foreach循环来解决此问题。但是,与我的第一次尝试相比,该解决方案的可读性较差。

有人建议我做错了什么吗?还是就像Noh AJAX支持WhereHas查询?

亲切的问候 迈克

1 个答案:

答案 0 :(得分:0)

我认为这是您的问题use $type_id

请修复为

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