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

Laravel:“强制”查询生成器返回空列表

Laravel:“强制”查询生成器返回空列表

PHP
30秒到达战场 2022-09-03 16:01:17
我有以下路线:Route::apiResource('payments', 'PaymentController', ['except' => ['store', 'destroy']]);Route::get('users/{user}/payments', [    'as' => 'users.payments',    'uses' => 'PaymentController@index',]);这个控制器:class PaymentController{    public function index(Request $request, User $user)    {        // Initialize query builder        $query = Payment::query();        // If a user was provided, return all payments belonging to that user        // if condition is satisfied        if ($user) {            if (condition) {                $query = $customer->payments();            } else {                // Some code that causes no results                $query->whereNull('id');   // <----- This hits the database            }        }        return PaymentResource::collection($query->paginate(10));    }}如果您点击它,则应返回所有用户进行的所有付款。/payments如果命中它,则仅当为 true 时,它才应返回用户进行的所有付款,否则应返回空列表。/users/id/paymentscondition此代码有效,但是是实际命中数据库的解决方法。$query->whereNull('id');有没有办法避免命中数据库并仍然返回空列表?
查看完整描述

2 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

您可以避免命中数据库,但仍然使用初始化的变量返回空列表到空集合或数组


class PaymentController

{

    public function index(Request $request, User $user)

    {

        // Initialize query builder

        $query = Payment::query();


        // If a user was provided, return all payments belonging to that user

        // if condition is satisfied

        $return = collect();

        if ($user) {

            if (condition) {

                $return = $customer->payments()->paginate(10);

            } 

        }


        return PaymentResource::collection($return);

    }

}


查看完整回答
反对 回复 2022-09-03
?
缥缈止盈

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

我试图在函数中有一个单一的返回,但更容易遵循@Chin梁给出的建议(谢谢!


class PaymentController

{

    public function index(Request $request, User $user)

    {

        // Initialize query builder

        $query = Payment::query();


        // If a user was provided, return all payments belonging to that user

        // if condition is satisfied

        if ($user) {

            if (condition) {

                $query = $customer->payments();

            } else {

                // Some code that causes no results

                return PaymentResource::collection(collect());

            }

        }

        // Other code here, for example a where statement

        // depending on what is passed in $request



        return PaymentResource::collection($query->paginate(10));

    }

}


查看完整回答
反对 回复 2022-09-03
  • 2 回答
  • 0 关注
  • 88 浏览

添加回答

举报

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