2014-10-25 11 views
32

Ich habe eine phone_models, phone_problems und ein phone_model_phone_problem Pivot-Tabelle. Die Pivot-Tabelle hat eine zusätzliche Spalte "Preis".den Wert einer zusätzlichen Pivot-Tabelle Spalte Laravel erhalten

PhoneModel:

class PhoneModel extends \Eloquent 
{ 
    public function problems() 
    { 
     return $this->belongsToMany('RL\Phones\Entities\PhoneProblem')->withPivot('price'); 
    } 
} 

PhoneProblem:

class PhoneProblem extends \Eloquent 
{ 
    public function models() 
    { 
     return $this->belongsToMany('PhoneModel')->withPivot('price'); 
    } 
} 

Was ich versuche ist, den Preis eines bestimmten Telefons mit einem bestimmten Problem zu tun bekommen. Diese

ist, wie ich es jetzt, aber ich fühle mich wie Laravel eine eingebaute Eloquent Funktion hat, kann ich nicht tun dies in einer viel einfacheren Weg finden:

$model = $this->phoneService->getModelFromSlug($model_slug); 
$problem = $this->phoneService->getProblemFromSlug($problem_slug); 

all dies ist die spezifische auswählt Modell und Problem von ihrer Schnecke.

dann, was ich tue, ist mit diesen Anmeldeinformationen ich den Preis wie so erhalten:

$row = DB::table('phone_model_phone_problem') 
->where('phone_model_id', '=', $model->id) 
->where('phone_problem', '=', $problem->id) 
->first(); 

so jetzt kann ich wie so $row->price den Preis bekommen, aber ich fühle mich wie es eine viel einfacher zu sein braucht und mehr " Laravels Art, dies zu tun.

Antwort

71

Bei der Verwendung von Viele-zu-Viele-Beziehungen mit Eloquent wird dem resultierenden Modell automatisch ein pivot-Attribut zugewiesen. Über dieses Attribut können Sie auf Pivot-Tabellenspalten zugreifen. Obwohl standardmäßig nur die Schlüssel im Pivot-Objekt vorhanden sind. Um Ihre Spalten in es zu bekommen, müssen Sie sie angeben, wenn die Beziehung zu definieren:

return $this->belongsToMany('Role')->withPivot('foo', 'bar'); 

Official Docs

Wenn Sie mehr Hilfe benötigen, die Aufgabe, die Beziehungen mit Eloquent konfigurieren, lassen Sie mich wissen.

bearbeiten

Zur Abfrage der Preis tun dies

$model->problems()->where('phone_problem', $problem->id)->first()->pivot->price 
+0

ich bereits eingerichtet, um die Beziehung Ich versuche, es zurückzuholen – Rodrigo

+0

Ich aktualisiere meine Frage für Sie zu arbeiten meine Beziehungen – Rodrigo

+0

@ user3666882 Dank sehen, ich habe meine Antwort auch aktualisiert – lukasgeiter

5

Um Daten aus Pivot-Tabelle erhalten:

$price = $model->problems()->findOrFail($problem->id, ['phone_problem'])->pivot->price; 

Oder wenn Sie viele Datensätze mit unterschiedlichen Preis haben:

$price = $model->problems()->where('phone_problem', $problem->id)->firstOrFail()->pivot->price; 

Zusätzlich.

Um Update Daten in der Pivot können Sie NEW WAY gehen:

$model->problems()->sync([$problemId => [ 'price' => $newPrice] ], false); 

Wo 2. param Satz auf false bedeutet, dass Sie nicht alle anderen verwandten Modelle tun lösen.

Oder gehen alte Art und Weise

$model->problems()->updateExistingPivot($problemId, ['price' => $newPrice]); 

Und erinnern Sie:

Um löschen:

$model->problems()->detach($problemId); 

Um erstellen neu:

$model->problems()->attach($problemId, ['price' => 22]); 

Es wurde getestet und erweisen mich in Laravel 5.1 Read more.

Verwandte Themen