【问题标题】:How to access varible inside orWhere() in laravel query builder|Laravel如何在 laravel 查询生成器中访问 orWhere() 中的变量|Laravel
【发布时间】:2018-05-16 07:04:44
【问题描述】:

在我尝试使用高级 where 条件之前,我正在尝试构建一点复杂的查询,其中一切都OK。
在下面的代码中,我收到一条错误消息

ErrorException: Undefined variable: user in file D:...**\app\Http\Controllers\ApiAuthController.php on line 285

第 285 行是 $query->where("tbl_transactions.from_user_id", "=", $user->id) 内的 orWhere()

 public function loadTransactions()
    {

        $token = JWTAuth::getToken();

        $user = JWTAuth::toUser($token);


        return DB::table('tbl_transactions')
            ->join('tbl_users as fromu', 'fromu.id', '=', 'tbl_transactions.from_user_id')
            ->join('tbl_users  as tou', 'tou.id', '=', 'tbl_transactions.to_user_id')
            ->select('tbl_transactions.id', 'tbl_transactions.from_user_id', 'tbl_transactions.to_user_id', 'tbl_transactions.amount', 'tbl_transactions.created_at', 'tbl_transactions.status', 'fromu.userid', 'tou.userid', 'tou.phone as tophone', 'fromu.phone as fromphone')
            ->orWhere(function ($query) {
                $query->where("tbl_transactions.from_user_id", "=", $user->id)// here the problem is (undefined **$user**)
                    ->where('tbl_transactions.to_user_id', '=', $user->id);
            })
            ->orderBy('tbl_transactions.id', 'desc')
            ->take(50)
            ->get();


    }

我是 laravel 的新手。这里的任何人都可以帮助我。

【问题讨论】:

  • 仅在这个网站上就被回答了一百万次......这是一个匿名函数的范围问题......与 laravel 或任何软件库完全无关。

标签: php laravel laravel-5


【解决方案1】:

您需要使用use 子句使变量在闭包范围内可访问。所以,改变这个:

->orWhere(function ($query) {

到这里:

->orWhere(function ($query) use($user) {

【讨论】:

    【解决方案2】:

    我懒得链接其他 100 条与此重复的帖子。

    PHP manual - anonymous functions 示例#3

    【讨论】:

      猜你喜欢
      • 2018-06-26
      • 2016-11-16
      • 2019-02-22
      • 2017-12-04
      • 2015-02-22
      • 2017-03-29
      • 2021-04-20
      • 2018-11-16
      相关资源
      最近更新 更多