Laravel 在子查询中使用相同的表
我无法将下一个SQL代码转换为laravel eloquent:Laravel 在子查询中使用相同的表,laravel,eloquent,laravel-query-builder,Laravel,Eloquent,Laravel Query Builder,我无法将下一个SQL代码转换为laravel eloquent: SELECT t1.template, t1.created_at FROM sent_emails t1 where created_at = ( select max(created_at) from sent_emails t2 where t2.template = t1.template ) group by t1.created_at, t1.template 或: 两个查询返回相同的数据集。在单独的变量中创
SELECT t1.template, t1.created_at
FROM sent_emails t1
where created_at = (
select max(created_at) from sent_emails t2 where t2.template = t1.template
)
group by t1.created_at, t1.template
或:
两个查询返回相同的数据集。在单独的变量中创建子查询不是一个选项,因为我需要从中返回多个值
如果我使用模型(而不是使用DB::
)创建表,我也不知道如何设置别名,所以这是我失败的尝试:
$sent_emails = SentEmail::where('created_at', function($query) {
SentEmail::where('template', 't1.template')->orderBy('created_at', 'desc');
})->groupBy('template', 'created_at')->get(['template', 'created_at']);
您的查询应该是这样的(我没有在计算机上测试这个,所以可能需要进一步编辑)
请发布您迄今为止尝试的查询生成器表达式。在where closer中,您需要执行类似$Query->where(此处的子查询结果)这样的操作。column_name引用此函数之外的表(我是否应该为该表指定别名,然后在此处使用它)?@niksrb我在where函数中使用了for表别名的示例
$sent_emails = SentEmail::where('created_at', function($query) {
SentEmail::where('template', 't1.template')->orderBy('created_at', 'desc');
})->groupBy('template', 'created_at')->get(['template', 'created_at']);
$sent_emails = SentEmail::where('created_at', function($query) {
$query->where('created_at', SentEmail::->whereColumn('column_name', 'table.column_name')->orderBy('created_at', 'desc')->max('created_at'));
})->groupBy('template', 'created_at')->get(['template', 'created_at']);