2013-04-30 23 views
12

muszę to dołączyć:Korzystanie Wyraźne w laravel Zaawansowany

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) 

Ale to nic dziwnego zwraca zduplikowane rekordy, więc próbuję użyć 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) 

ale chcę używać distinct()na zasadzie konkretne pojedyncze pole, które łatwo mógłbym zrobić w SQL. Wydaje się, że distinct() nie przyjmuje parametrów, tj. Nie mogę powiedzieć, distinct('volunteer.id').

Czy ktoś może wskazać mi, w jaki sposób mogę usunąć moje duplikaty? Założę się, że jest to dla mnie kolejne zdzierstwo na czole.

+0

Oczywiście jestem tutaj całkowicie głupi i muszę dodać '-> group_by ('volunteer.id')' oraz '-> distinct()'. –

+0

Ale włączając '-> group_by ('volunteer.id')' powoduje, że moje linki stronicowania znikają !! ??? –

+0

Wierzę, że od jakiegoś czasu w Laravel 3 pojawił się błąd dotyczący stronicowania i group_by; Nie wiem, czy zostało to rozwiązane w Laravel 4. –

Odpowiedz

26

W moim projekcie Próbowałem distinct() i groupby() też i oboje pracowali:

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

Zgodnie z tym, distinct() powinny działać w Twoim przypadku również wystarczy użyć go 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')); 

W przeciwnym razie nie potrzebujesz distinct() podczas korzystania z groupby(), więc możesz po prostu użyć: