2013-04-30 6 views
12

Ich habe dieses beitreten:in Laravel Distinct Mit Fluent

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) 

Aber es gibt wenig überraschend doppelte Datensätze, also versuche ich distinct() zu verwenden:

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) 

aber ich will distinct()auf einem verwenden, spezifisches einzelnes Feld was ich leicht in SQL machen könnte. Es scheint distinct() Parameter nicht zu nehmen, d. H. Ich kann nicht distinct('volunteer.id') sagen.

Kann mir jemand zeigen, wie kann ich meine doppelten Datensätze entfernen? Ich wette, das ist ein weiterer Stirnslapper für mich.

+0

Natürlich bin ich hier völlig dumm und muss '-> group_by ('volunteer.id')' sowie '-> distinct()' hinzufügen. –

+0

Aber einschließlich '-> group_by ('volunteer.id')' macht meine Paginierung links verschwinden !! –

+0

Ich glaube, dass es in Laravel 3 seit einiger Zeit einen Bug mit Paginierung und group_by gibt; Ich weiß nicht, ob es in Laravel 4 gelöst wurde. –

Antwort

26

In meinem Projekt habe ich versucht, distinct() und groupby() zu und beide gearbeitet:

//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')); 

diesen Laut, distinct() sollte auch in Ihrem Fall, es einfach zu verwenden mit 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')); 

Andernfalls brauchen Sie nicht distinct(), wenn Sie groupby() verwenden, so können Sie einfach verwenden:

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'));