为了账号安全,请及时绑定邮箱和手机立即绑定

无法使用 Laravel eloquent 获取数据

无法使用 Laravel eloquent 获取数据

PHP
慕神8447489 2021-11-26 19:28:40
我想要的是,当用户访问此链接时/api/bonus?provider[]=MyCompany ,结果将仅显示由 providers=[MyCompany] 提供的奖金。在我的控制器中:public function all(Request $request){    $size = $request->input('size');    $bonus = Bonus::with('category', 'bonus');    $bonus = Filterer::apply($request, $size, $bonus); $bonus = Filterer::apply($request, $size, $bonus);        return response()->json([            'code' => 0,            'success' => true,            'data' => BonusResource::collection($bonus),}我的预期结果是获得等于的所有提供者,[MyCompany] 但不知何故此查询不起作用。过滤器public static function apply(Request $filters, $size, $bonus){     if ($filters->has('provider')) {                $bonus->whereHas('bonus', function ($query) use ($filters) {                    $query->whereIn('providers', $filters->input('provider',[]));                });            }return $bonus->paginate($size);}但最后我得到了这个结果。数据为空[]。我想知道为什么我无法获取数据。我做错了哪一部分?
查看完整描述

3 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

要实际获得结果,您应该使用一些从数据库中获取数据的函数,例如get,first(取决于您是要获取多行还是仅获取第一行)。现在你只准备应该执行的查询,但你永远不会执行它,所以你应该改变行:


$bonus = Filterer::apply($request, $size, $bonus);

进入


$bonus = Filterer::apply($request, $size, $bonus);

$bonus = $bonus->get();

执行查询并获取结果。


查看完整回答
反对 回复 2021-11-26
?
斯蒂芬大帝

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) . '%']);

                    }

                }

            });

        };


查看完整回答
反对 回复 2021-11-26
?
喵喵时光机

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 文档。


查看完整回答
反对 回复 2021-11-26
  • 3 回答
  • 0 关注
  • 181 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信