使用 AJAX 时 Laravel6 WhereHas Error 500

Posted

技术标签:

【中文标题】使用 AJAX 时 Laravel6 WhereHas Error 500【英文标题】:Laravel6 WhereHas Error 500 when using AJAX 【发布时间】:2020-05-02 00:46:21 【问题描述】:

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

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

我创建了一个函数,因此当用户选择设备类型时,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”有关。我知道我可以通过首先询问模型表并创建一个 Foreach 循环来解决这个问题。但是我这个解决方案的可读性不如我的第一次尝试。

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

亲切的问候 迈克

【问题讨论】:

【参考方案1】:

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

请修改为

public function scopeFilterByType($query, $type_id)

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

【讨论】:

非常感谢。很遗憾我没有看到这个错误。

以上是关于使用 AJAX 时 Laravel6 WhereHas Error 500的主要内容,如果未能解决你的问题,请参考以下文章

Laravel6使用事件监听发送消息通知

Laravel6使用事件监听发送消息通知

Laravel6使用事件监听发送消息通知

Laravel6使用事件监听发送消息通知

Laravel6与VueJS联合开发详解

Ajax 帖子说未定义 laravel 6