【问题标题】:Conditionally add where clause to leftJoin in Laravel在 Laravel 中,有条件地将 where 子句添加到 leftJoin
【发布时间】:2021-05-16 07:27:44
【问题描述】:

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

当我尝试使用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();

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

【问题讨论】:

    标签: php sql laravel laravel-query-builder


    【解决方案1】:

    适用于所有地方,例如:

    function ($join) {
    

    你应该确保变量像这样可见:

    function ($join) use ($week) {
    

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

    【讨论】:

    • 谢谢,@Marcin Nabialek,您的解决方案可以完成这项工作。但是,除第一条记录外,其余记录均显示为空。
    猜你喜欢
    • 2019-11-12
    • 2014-01-19
    • 1970-01-01
    • 2020-06-05
    • 2016-12-16
    • 2013-12-23
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    相关资源
    最近更新 更多