在 Laravel Fluent 中使用 Distinct

Posted

技术标签:

【中文标题】在 Laravel Fluent 中使用 Distinct【英文标题】:Using Distinct in Laravel Fluent 【发布时间】:2013-04-24 06:48:05 【问题描述】:

我有这个加入:

Return DB::table('volunteer')
            ->join('volunteer_volunteer_category', 'volunteer_volunteer_category.volunteer_id', '=', 'volunteer.id')
            ->select(array('*','volunteer.id AS link_id'))
            ->where('is_published', '=', 1)

但不出所料,它会返回重复记录,所以我尝试使用distinct()

Return DB::table('volunteer')
            ->join('volunteer_volunteer_category', 'volunteer_volunteer_category.volunteer_id', '=', 'volunteer.id')
            ->select(array('*','volunteer.id AS link_id'))
                        ->distinct()
            ->where('is_published', '=', 1)

但我想在特定的单个字段上使用distinct() ,这在 SQL 中很容易做到。看来distinct() 不带参数,即我不能说distinct('volunteer.id')

谁能告诉我如何删除我的重复记录?我敢打赌,这对我来说又是一个前额拍板。

【问题讨论】:

当然我在这里完全是愚蠢的,需要添加->group_by('volunteer.id')以及->distinct() 但是包含->group_by('volunteer.id')会让我的分页链接消失!!??? 我认为 Laravel 3 中的分页和 group_by 存在一段时间的错误;不知道 Laravel 4 中是否解决了。 【参考方案1】:

在我的项目中,我也尝试了distinct()groupby(),它们都有效:

//Distinct version.
Company_Customer_Product::where('Company_id', '=', $companyid)->distinct()->get(array('Customer_id'));
//Goup by version.
Company_Customer_Product::where('Company_id', '=', $companyid)->groupby('Customer_id')->get(array('Customer_id'));

据此,distinct() 也应该适用于您的情况,只需将其与 get() 一起使用即可:

Return DB::table('volunteer')
   ->join('volunteer_volunteer_category', 'volunteer_volunteer_category.volunteer_id', '=', 'volunteer.id')
   ->select(array('*','volunteer.id AS link_id'))
   ->distinct()
   ->where('is_published', '=', 1)
   ->get(array('volunteer.id'));

否则,当您使用groupby() 时,您不需要distinct(),因此您可以使用:

Return DB::table('volunteer')
   ->join('volunteer_volunteer_category', 'volunteer_volunteer_category.volunteer_id', '=', 'volunteer.id')
   ->select(array('*','volunteer.id AS link_id'))
   ->group_by('volunteer.id')
   ->where('is_published', '=', 1)
   ->get(array('volunteer.id'));

【讨论】:

以上是关于在 Laravel Fluent 中使用 Distinct的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Laravel 的 Eloquent/Fluent 将每一行设置为相同的值?

如何使用 Laravel Fluent 按每个 ID(用户)计算列并使用 WHERE 条件?

Laravel Fluent 查询生成器加入子查询

如何使用 Laravel 的流畅查询构建器混合原始 SQL 和非原始 SQL

Laravel 的安装使用

使用 eloquent 截断 laravel 中的所有表