web-dev-qa-db-ja.com

Laravel FluentでDistinctを使用する

私はこれに参加しています:

_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')とは言えません。

重複レコードを削除するにはどうしたらいいですか?これは私にとってもう一つの額スラッパーだと思います。

13
Glenn Williams

私のプロジェクトでは、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'));
_

それ以外の場合は、distinct()を使用するときにgroupby()は必要ないため、次のように使用できます。

_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'));
_
26
totymedli