3 回答
TA贡献1752条经验 获得超4个赞
要实际获得结果,您应该使用一些从数据库中获取数据的函数,例如get,first(取决于您是要获取多行还是仅获取第一行)。现在你只准备应该执行的查询,但你永远不会执行它,所以你应该改变行:
$bonus = Filterer::apply($request, $size, $bonus);
进入
$bonus = Filterer::apply($request, $size, $bonus);
$bonus = $bonus->get();
执行查询并获取结果。
TA贡献1827条经验 获得超8个赞
首先,将输入转换为数组,这里我正在使用explode() ,然后我循环转换后的数组并用于%%搜索providers. 希望它会有所帮助!
if ($filters->has('provider') && trim($filters->input('provider')) != "") {
$bonus_list->whereHas('bonusCompany', function ($query) use ($filters) {
$providers = explode(',', (trim($filters->input('provider'), '[]')));
foreach ($providers as $key => $provider) {
if ($key == 0) {
$query->where('providers', 'LIKE', ['%' . trim($provider) . '%']);
} else {
$query->orwhere('providers', 'LIKE', ['%' . trim($provider) . '%']);
}
}
});
};
TA贡献1846条经验 获得超7个赞
我可能是错的,但根据您的代码,该函数apply没有返回任何内容,它将始终为空。不应该是 return $bonus 吗?并且不要忘记get.
public static function apply(Request $filters, $size, $bonus)
{
if ($filters->has('provider')) {
$bonus->whereHas('bonusRelease', function ($bonus) use ($filters) {
return $bonus->whereJsonContains('providers', $filters->input('provider',[]));
});
}
return $bonus->get();
}
更新了我的答案
的providers是一个JSON类型。你不能只用where in (a,b,c). 更改为whereJsonContains。请检查此链接另一个案例和laravel 文档。
- 3 回答
- 0 关注
- 203 浏览
添加回答
举报