Laravel 4-联接表,但仅限于最新的行

Laravel 4-联接表,但仅限于最新的行,laravel,laravel-4,eloquent,Laravel,Laravel 4,Eloquent,我有两个表格:引用、回复 在datatable中,我显示引号,对于每一行,我显示响应的列计数。我现在想显示最新回复的日期,但我被阻止:( 这是我的密码: $quotes = Quote::select('Quotes.*', DB::raw('COUNT(Responses.id) as total_responses') ) ->leftjoin('Responses', function($join) { $join->on('Responses.

我有两个表格:引用、回复

在datatable中,我显示引号,对于每一行,我显示响应的列计数。我现在想显示最新回复的日期,但我被阻止:(

这是我的密码:

$quotes = Quote::select('Quotes.*', DB::raw('COUNT(Responses.id) as total_responses') )
    ->leftjoin('Responses', function($join)
    {
        $join->on('Responses.quote_id', '=', 'Quotes.id')
        ->where('Responses.state', '!=', '0');
    })
    ->groupby('Quotes.id');
是否可以添加另一个具有相同表的左联接,并使用自定义查询仅选择最新的行


感谢您的帮助

您可以使用原始
最大值
功能。假设您的日期已存储
响应。日期
,代码如下所示

$quotes = Quote::select('Quotes.*', DB::raw('COUNT(Responses.id) as total_responses'), DB::raw('MAX(CAST(Responses.date AS CHAR)) as latest') )
    ->leftjoin('Responses', function($join) {
        $join->on('Responses.quote_id', '=', 'Quotes.id')
        ->where('Responses.state', '!=', '0');
    })
    ->groupby('Quotes.id');

由于mysql错误,首先必须将其转换为字符。您需要的是在select命令中包含
响应。在
处创建,并使用同一列对其进行过滤。例如

$quotes = Quote::select('Quotes.*', 'Responses.created_at as last_response_date', DB::raw('COUNT(Responses.id) as total_responses'))
    ->leftjoin('Responses', function($join)
    {
        $join->on('Responses.quote_id', '=', 'Quotes.id')
        ->where('Responses.state', '!=', '0');
    })
    ->groupby('Quotes.id')->orderBy('Responses.created_at', 'desc');

你是说你需要按列降序排序,然后选择第一行吗?还是说你想得到所有的引号并得到最后一个引号响应的日期?这里报告的错误在mySQL 5.6+中于2010年8月4日8:23()得到修复,所以如果使用mySQL 5.6+就不需要强制转换MAX()或MINX()中使用的日期请注意,上面的答案将显示问题中要求的最新日期,而不是问题标题中要求的最新一行。区别很重要。