繁体   English   中英

Laravel Eloquent 查询范围与使用 DB::raw 的连接

[英]Laravel Eloquent query scope with join that uses DB::raw

我有一个来自 L5.1 应用程序的查询范围,该应用程序不适用于 L5.7。 作用域添加了一个简单的连接与 DB::raw 语句,如下所示:

    public function scopeLatest($query)
    {
        return $query->join(DB::raw('(SELECT patient_id, MAX(created_at) created_at FROM referral_reports GROUP BY patient_id) r2'), function ($join) {
                            $join->on('referral_reports.patient_id', '=', 'r2.patient_id');
                            $join->on('referral_reports.created_at', '=', 'r2.created_at');
                            });
    }

在 L5.1 上使用此范围效果很好,但在 5.7 中,查询中省略了整个连接并且不会引发错误。 我不得不在两个应用程序上使用 DB::enableQueryLog() 才能看到结果查询是不同的。

知道为什么这在 5.7 中不起作用吗?

这是通过模型上的静态方法使用此范围的示例:

        $entries = self::inStudies($studies)
                       ->calltime($startDate, $endDate)
                       ->latest()
                       ->omitdeleted()
                       ->get();

inStudies、calltime、latest、omitdeleted 都是查询范围。

您的范围不起作用,因为它与latest方法冲突。 只需重命名这个范围,它就会起作用。

Laravel 5.3 中添加了latest / oldest方法

您是否添加了使用数据库; 在上面?

试试这些

public function scopeLatest($query){

return $query->join('referral_reports.patient_id', '=', 'r2.patient_id')

    ->join('referral_reports.created_at', '=', 'r2.created_at')

    ->select(DB::raw('SELECT patient_id, created_at) r2'));
}

通常我会从控制器运行组

Model::latest()->max('created_at')->groupBy('patient_id')

暂无
暂无

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

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