Laravel6 使用 AJAX WhereHas Error 500

Laravel6 WhereHas Error 500 when using AJAX

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

制作人

类型

型号

在我的生产者模型中,我定义了以下过滤器方法:

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

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

我创建了一个函数,因此当用户 select 设备类型 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" 做点什么。我知道我可以通过首先询问模型 Table 并创建一个 Foreach 循环来解决这个问题。但是我的这个解决方案比我第一次尝试的可读性差。

有没有人建议我做错了什么,或者就像没有 AJAX 支持 WhereHas 查询一样?

亲切的问候 麦克

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

请修正为

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