2016-05-13 3 views
1

Ich habe zwei Modelle mit viele-zu-viele Beziehung zwischen ihnen definiert: User und Post. Ich muss auf alle Pivot-Tabelle Datensätze der Benutzer Beiträge zugreifen. Wie kann ich das erreichen? Zum Beispiel:Wie wählt man nur Pivot-Tabellen mit Eloquent?

$user->posts()->pivot()->get(); // I need to do something like this 

Der Grund, warum ich das brauche, ist, eine Massenaktualisierung in einer Abfrage auf diesen Pivots durchzuführen. Illustration Beispiel:

// set 'times_seen' to 100 for all of the pivot records 
$user->posts()->pivot()->update(['times_seen' => 100]); 
+1

Was für Pivot-Tabellen? Sie haben nur eine Pivot-Tabelle. Was genau willst du erreichen? –

+0

Ich möchte alle ** Datensätze ** der Pivot-Tabelle auswählen –

+0

Benötigen Sie nur IDs oder auch Sammlungen von User- und Post-Modellen? –

Antwort

1

Ihre Frage ist nicht wirklich klar, ich bin nicht sicher, was Sie wirklich so benötigen Sie weitere Details zur Verfügung stellen.

Daten aus Pivot Tabelle in $ Pivot Attribut von verwandtem Modell verfügbar ist, so dass Sie es mit dem folgenden zugreifen:

foreach ($user->posts as $post) { 
    echo $post->pivot->someFieldFromPivotData; 
} 

Sie weitere Informationen darüber, wie mit Pivot-Tabellen arbeiten finden in der Dokumentation: https://laravel.com/docs/5.1/eloquent-relationships#many-to-many

Der effizienteste Weg, alle damit verbundenen Dreh Reihen zu aktualisieren ist direkt auf die Tabelle zu bedienen:

// to set to fixed value 
DB::table('pivot_table_name')->where('user_id', $user->id)->update(['times_seen' => 1]); 

// to increment by one 
DB::table('pivot_table_name')->where('user_id', $user->id)->increment('times_seen'); 
+0

Ich möchte die Pivot-Datensätze in einer SQL-Abfrage in Großaufträgen aktualisieren. Iterating durch jeden von ihnen wäre ineffizient –

+0

Was möchten Sie in der Pivot-Tabelle aktualisieren? –

+0

Zum Beispiel: 'times_seen' Feld –

1

Die Pivot-Tabelle enthält normalerweise nur zwei Fremdschlüssel, die für die Verbindung zweier Modelle verwendet werden. Wenn Sie alle Posts des angegebenen Benutzers abrufen müssen, können Sie dies mit $user->posts() tun.

Ich möchte die Pivot-Datensätze in einer SQL-Abfrage in Großbuchstaben aktualisieren. Durchlaufen jeder von ihnen würde

ineffizient sein, wenn Sie richtig verstanden habe, wollen Sie attach(), detach() und sync() mit einem Array verwenden:

$user->roles()->detach([1, 2, 3]); 

$user->roles()->attach([1, 2, 3]); 

$user->roles()->sync([1, 2, 3]); 

https://laravel.com/docs/5.1/eloquent-relationships#inserting-many-to-many-relationships

+0

Vielen Dank für die Antwort, aber das ist nicht, was ich suche. Was ich will, ist zum Beispiel, ein 'times_seen' Feld für jeden Pivot zu aktualisieren –

+0

Klicken Sie auf den Link in meiner Antwort. Sie können '$ user-> roles() -> attach ([1 => ['expires' => $ expires], 2, 3]);' und ich denke, das ist genau das, was Sie wollen. –

+0

Entschuldigung, ich denke, ich war ziemlich vage mit meiner Frage. Vielen Dank für Ihre Zeit –

Verwandte Themen