首页 > 解决方案 > Laravel - 如何在 $query 函数中定义变量?

问题描述

我的控制器中有这个 $query 函数。有用。但是当我尝试在其中添加一个变量时,它不起作用。这是我的完整功能

$setting = DB::table('settings')->where('id','=','1')->get();
     foreach($setting as $st)
     $date1 = $st->date1;
     $date2 = $st ->date2;

$accounts =  Account::with(['subaccount' => function($query){
             $query->with(['subaccountinvoice'=> function($query){
             $query->where('validate', '=','1')->whereBetween('updated_at', [$date1, $date2]);}])->get();
         }])->get();

变量$date1$date2没有定义,因为它们是 insidd 查询函数

标签: phplaravel

解决方案


为了在 PHP 的闭包中继承变量,您需要使用use关键字将其传递给闭包。

将您的帐户代码更改为:

$accounts =  Account::with(['subaccount' => function($query) use ($date1, $date2) {
                 $query->with(['subaccountinvoice'=> function($query) use ($date1, $date2) {
                    $query->where('validate', '=','1')->whereBetween('updated_at', [$date1, $date2]);}])->get();
             }])->get();

推荐阅读