Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 在子查询中使用相同的表_Laravel_Eloquent_Laravel Query Builder - Fatal编程技术网

Laravel 在子查询中使用相同的表

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 或: 两个查询返回相同的数据集。在单独的变量中创

我无法将下一个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
或:

两个查询返回相同的数据集。在单独的变量中创建子查询不是一个选项,因为我需要从中返回多个值

如果我使用模型(而不是使用
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']);