无法使用 Laravel eloquent 获取数据

我想要的是,当用户访问此链接时/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);

}

但最后我得到了这个结果。数据为空[]。

http://img2.mukewang.com/61a0c4ff00015f6e03070210.jpg

我想知道为什么我无法获取数据。我做错了哪一部分?


慕神8447489
浏览 204回答 3
3回答

温温酱

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

斯蒂芬大帝

首先,将输入转换为数组,这里我正在使用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) . '%']);                    }                }            });        };

喵喵时光机

我可能是错的,但根据您的代码,该函数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 文档。
打开App,查看更多内容
随时随地看视频慕课网APP