2016-11-27 6 views
1

Ich versuche herauszufinden, was die beste Vorgehensweise ist, um eine neue Zeile zu erstellen.Best Practice zum Erstellen von Eintrag (Beziehung)?

Lassen Sie sagen, wir haben dies in der Steuerung:

$this->noteRepository->addNote($request->user(), $name, $note); 

Zwei addNote Methode in der noteRepository Klasse Arbeitslösung, zum Beispiel:

Option 1 - Dieser Eintrag noteModel

mit schaffen
public function addNote($user, $name, $note) 
{ 
    return $this->noteModel->create([ 
     'user_id' => $user->id, 
     'name' => $name, 
     'note' => $note, 
    ]); 
} 

Option 2 - Im Benutzermodell gibt es eine notes() Methode.

public function addNote($user, $name, $note) 
{ 
    return $user->notes()->create([ 
     'user_id' => $user->id, 
     'name' => $name, 
     'note' => $note, 
    ]); 
} 

Im user Modell aussehen:

public function notes() 
{ 
    return $this->hasMany(Note::class); 
} 

Welche wird Ansatz empfohlen zu verwenden und warum?

Antwort

3

Option 2 sieht besser mit einigen Änderungen wie:

public function addNote($user, $name, $note) 
{ 
    return $user->notes()->create([ 
     'name' => $name, 
     'note' => $note, 
    ]); 
} 

Es ist, weil Sie nicht manuell die FK gesetzt haben und es ist eleganter und lesbar. Auf diese Weise werden Sie Laravel in vollen Zügen nutzen.

Vorteile

  • Die Beziehung wird automatisch eingestellt.
  • Der Name der Fremdschlüsselspalte spielt keine Rolle (er muss nur in der Beziehungserklärung definiert werden).
+0

Zustimmen. Ich benutze diesen Ansatz auch. – alariva

+0

iCode Wenn addNote eine Methode im Benutzermodell ist kann ich $ this-> notes() -> create(); und entferne $ user von den params? – borracciaBlu

+0

@borracciaBlu Ja, Sie können dies tun. –

Verwandte Themen