2017-02-16 2 views
-1

Ich habe diese Tabelle, die so genannte "share":Laravel Eloquent Modell erhalten einzigartige Benutzer

share table

und dies ist der "user" Tabelle:

user table

So bekomme ich die Liste der freigegebenen Artikel nach "Teilen" -Modell und dem Benutzer, der mit jedem Eintrag verknüpft ist:

Was ich brauche, ist es, die Benutzer mit parent_id 3 zurückzukehren:

$user = Share::where('parent_id', '=', 3)->paginate(15); 

Sein gibt alles, aber ich brauche nur einzelne Nutzer wie folgt zurück:

enter image description here

Ihre Hilfe schätzen.

+0

Bitte bewerten Sie den negativen Punkt nicht. Es ist nur meine Frage. –

+0

Bitte erläutern Sie noch einmal, was Sie zu tun versuchen. Sie möchten eine 'Share' machen und die Benutzer dieser Freigabe bekommen? – EddyTheDove

+0

@EddyTheDove Ja, genau. Ich muss die Liste der Benutzer aus der Freigabetabelle abrufen. So kann ich zeigen, wie viele Benutzer ich habe. –

Antwort

0

Sie können die Methode groupBy verwenden, um eindeutige Benutzer zu erhalten. Siehe diesen Link https://laravel.com/docs/5.4/queries

$user = Share::where('parent_id', '=', 3)->groupBy('item_id')->paginate(15); 

Hopes Ihre Frage beantwortet.

+0

Es funktioniert nicht. Ich habe versucht, aber es trow diesen Fehler: SQLSTATE [42000]: Syntaxfehler oder Zugriffsverletzung: 1055 'app_db.share.id' ist nicht in GROUP BY (SQL: Wählen Sie * aus 'share' wo' parent_id' = 3 Gruppe von 'E-Mail' Limit 15 Offset 0)' –

+0

@ Martian.titan ändern Sie es zu 'user_id' – Nere

+0

Leider gleichen Fehler. –

0

Nach Ihre Kommentare, möchten Sie mit einem ähnlichen parent_id (3) alle Anteile zu übernehmen:

$shares = Share::where('parent_id', 3)->get(); 

und deren Nutzer. Jede Freigabe gehört einem Benutzer. Aber jeder Benutzer Benutzer kann viele Male teilen, aber möchte den Benutzer nur einmal nehmen. Wir konnten tun

//Using eloquent 
$users = Share::where('parent_id', 3) 
->join('users', 'users.id', '=', 'shares.user_id') 
->select('users.id', 'users.email', 'users.first_name', 'users.last_name') 
->groupBy('users.id', 'users.email', 'users.first_name', 'users.last_name') 
->get(); 

//using Query builder 
$users = DB::table('shares') 
->join('users', 'users.id', '=', 'shares.user_id') 
->where('shares.parent_id', 3) 
->select('users.id', 'users.email', 'users.first_name', 'users.last_name') 
->groupBy('users.id', 'users.email', 'users.first_name', 'users.last_name') 
->get(); 

Dies sollten Sie eine bestimmte Liste von Benutzern geben parent_id = 3 geteilt zu haben.

+0

Leider funktioniert es nicht richtig. Es gibt nur die Details von parent_id 3 statt der Benutzerdetails zurück. –

Verwandte Themen