2014-03-06 8 views
5

Ich verstehe, dass, um einen Fremdschlüssel zu speichern, sollte man das entsprechende Modell verwenden und die associate() Funktion, aber ist es wirklich die Mühe wert, diese gehe durchSpeicher ein Modell mit mehreren Fremdschlüsseln in Laravel 4

$user = new User([ 
    'name' => Input::get('name'), 
    'email' => Input::get('email') 
]); 

$language = Language::find(Input::get('language_id'); 
$gender = Gender::find(Input::get('gender_id'); 
$city = City::find(Input::get('city_id'); 

$user->language()->associate($language); 
$user->gender()->associate($gender); 
$user->city()->associate($city); 

$user->save(); 

wenn man das einfach machen kann?

User::create(Input::all()); 

Ich fühle mich wie ich hier etwas fehlt bin, vielleicht ist es eine noch einfacher und saubere Weise Fremdschlüssel in Controllern (und Ansichten) zu behandeln?

Antwort

0

Ich sehe wirklich nichts falsch mit tun User::create(Input::all());.

Offensichtlich möchten Sie etwas Validierung, aber es macht das gleiche.

Ich denke, die associate() Methode ist nützlicher für die Umkehrung Ihrer Situation.

Angenommen, Sie hatten ein Formular, das ein Benutzer ausfüllen konnte, um seine Stadt zu Ihrer App hinzuzufügen, und sollte dieser Stadt automatisch zugewiesen werden.

$city = City::create(Input::all()); würde nur die erste Hälfte Ihrer Anforderungen erreichen, weil der Benutzer noch nicht angeschlossen wurde, da Stadt keine user_id Spalte hat.

Sie würden dann so etwas wie $city->user()->associate(User::find(Auth::user()->id));

+0

Vielen Dank für Ihre Eingabe, natürlich gibt es Validierung erforderlich, aber das ist für beide Fälle, so dass ich es nicht absichtlich gesetzt. Vielleicht hast du recht, in deinem Szenario hat associate() mehr Bedeutung, aber ich denke, ich habe noch nicht genug mit L4 gemacht, um zu wissen, wann 'associate()' nützlich sein wird. Ich bin bereit, diese Frage offen zu lassen, um zu sehen, ob jemand mit einer besseren Erklärung/Idee kommt. Prost – Nicolas

+1

Kein Problem, vielleicht werden wir beide etwas lernen. – user3158900

Verwandte Themen