繁体   English   中英

有条件地在 Laravel 中将 where 子句添加到 leftJoin

[英]Conditionally add where clause to leftJoin in Laravel

我有一些表在我的数据库中引用用户表。 所以我想在不同的表中获取指定一周内发生的活动记录。

它表明当我尝试使用where子句时,星期是undefined的,如下所示。

$week = 6;

$users = User::leftJoin(DB::raw('(SELECT user_id, week_number as week, SUM(amount) as performance_amount FROM performances GROUP BY week_number) AS p'), function ($join) {
      $join->on('p.user_id', '=', 'users.id')->where('p.week', $week);
    })
      ->leftJoin(DB::raw('(SELECT user_id, week_number as week, SUM(amount) as agent_amount FROM agents GROUP BY week_number) AS ag'), function ($join) {
        $join->on('ag.user_id', '=', 'users.id')->where('ag.week', $week);
      })
      ->leftJoin(DB::raw('(SELECT user_id, week_number as week, SUM(amount) as accumulative_amount FROM accumulatives GROUP BY week_number) AS ac'), function ($join) {
        $join->on('ac.user_id', '=', 'users.id')->where('ac.week', $week);
      })
    ->get();

当我硬编码周值时,它返回预期值,但记录周值的 rest 返回null ,如下所示。

结果样本

对于所有地方,例如:

function ($join) {

你应该确保变量是可见的,如下所示:

function ($join) use ($week) {

您应该阅读https://www.php.net/manual/en/functions.anonymous.php了解更多详情

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM