2016-11-27 2 views
1

Я пытаюсь выяснить, что лучше всего подходит для создания новой строки.Лучшая практика создания записи (отношения)?

Пусть говорят, что мы имеем это в контроллере:

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

Два рабочего раствора addNote метода в noteRepository классе, например:

Вариант 1 - Это позволит создать запись с помощью noteModel

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

Вариант 2 - в пользовательской модели есть метод notes().

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

В user модели выглядеть следующим образом:

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

Какой рекомендуется подход к использованию и почему?

ответ

3

Вариант 2 выглядит лучше, с некоторыми изменениями, как:

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

Это потому, что вам не придется вручную установить FK, и это более изящным и читаемым. Таким образом, вы будете использовать Laravel в полной мере.

Преимущества

  • отношения будут установлены автоматически.
  • Имя столбца внешнего ключа не имеет значения (оно должно быть определено только в объявлении отношений).
+0

Согласен. Я тоже использую этот подход. – alariva

+0

iCode, если addNote - это метод в пользовательской модели, я могу использовать $ this-> notes() -> create(); и удалить $ user из параметров? – borracciaBlu

+0

@borracciaBlu Да, вы можете это сделать. –

Смежные вопросы