我是Laravel的新手,现在在我的App中面临一个有趣的问题。 我有3张桌子。
生产者
类型
模型
在生产者模型中,我定义了以下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查询?
亲切的问候 迈克
答案 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 );});
}