在 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 条件?