Laravel 查询生成器 returns 生成时没有结果 SQL 完美

Laravel Query Builder returns no results while generated SQL works perfect

我正在积极从事 laravel 项目,运行 遇到了一些与查询生成器有关的问题。我试图避免使用 DB::Raw,但看起来我可能需要这样做。

        $query = app($this->model());
        $query = $query->select(['last_name', 'first_name', 'birthday'])
                       ->distinct()
                       ->leftJoin('enrollments', 'students_meta.uid', '=', 'enrollments.student_uid')

        ->whereIn('enrollments.type', $types)
        ->where('enrollments.startdate', '<=', "'{$today}'")
        ->where(function ($join) use ($today) {
            $join->where('enrollments.dropdate', '>=', "'{$today}'")
                  ->orWhereNull('enrollments.dropdate');
        });

        // todo: add viewBy filter
        $query = $query->where('birth_month', '=', Carbon::today()->month);
        $query = $query->orderBy('last_name')->orderBy('first_name');
        $models = $query->get();

上面的查询生成器生成以下 SQL :

SELECT distinct `last_name`, `first_name`, `birthday` 
    FROM `students_meta` 
    LEFT JOIN `enrollments` ON `students_meta`.`uid` = `enrollments`.`student_uid` 
    WHERE `enrollments`.`type` IN ('ACTIVE', 'active') 
    AND `enrollments`.`startdate` <= '2019-10-29' 
    AND (`enrollments`.`dropdate` >= '2019-10-29' OR `enrollments`.`dropdate` IS NULL) 
    AND `birth_month` = 10 
ORDER BY `last_name` asc, `first_name` asc;

生成的 SQL 是完美的,基于我正在移动的旧代码并产生了预期的结果。如果我四处移动一些东西,似乎我可以让查询生成器得到 return 结果,但它们不是正确的。我已经查看了其他 questions/answers 关于此类问题的内容,并尝试了多种将 join/changing 移动到附近位置的方案,但仍然没有成功。

有什么建议吗? (除了在 DB::Raw()

中获取生成的 sql 和 运行
$query = $query->orderBy('last_name')->orderBy('first_name')->get();

您的查询工作正常,但您没有输出它。

您还可以使用->get()->toArray();以数组格式检索数据

$today 左右删除引号。 where 子句的第三个(或第二个,如果删除比较运算符)参数将值作为预准备语句中的参数发送。所以

 "'{$today}'"

在直接查询中看起来像这样:

where enrollments.startdate <= "'2019-10-29'"

所以将您的查询更改为

 ->where('enrollments.startdate', '<=', $today)

确保在查询中删除所有此类实例的引号。