2016-11-27 4 views
1

新しい行を作成するのがベストプラクティスであることを理解しようとしています。エントリ(リレーションシップ)を作成するベストプラクティス?

レッツは、我々はコントローラでこれを持っていると言う:例えばnoteRepositoryクラスのaddNote方法の

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

二つのワーキング溶液、:

オプション1 - これはnoteModel

を使用してエントリを作成します。
public function addNote($user, $name, $note) 
{ 
    return $this->noteModel->create([ 
     'user_id' => $user->id, 
     'name' => $name, 
     'note' => $note, 
    ]); 
} 

オプション2 - ユーザーモデルにnotes()メソッドがあります。 userモデルで

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

は、次のようになります。

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

使用するためのアプローチとその理由をお勧めしますか?手動でFKを設定する必要はありません、それはよりエレガントで読みやすいですので、それはです

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

:として

答えて

3

オプション2は、いくつかの変更を加え良く見えます。この方法でLaravelを最大限に活用します。

利点

  • 関係が自動的に設定されます。
  • 外部キー列の名前は関係ありません(リレーションシップ宣言でのみ定義する必要があります)。
+0

同意する。私はこのアプローチも使用しています。 – alariva

+0

iCode addNoteがユーザーモデルのメソッドである場合、$ this-> notes() - > create();を使用できます。 paramsから$ userを削除しますか? – borracciaBlu

+0

@borracciaBluはい、これを行うことができます。 –

関連する問題