Příklad: Přidání komentáře (comment) ke článku (post)
Rozdíl mezi metodami save() a create()
Metoda save() očekává jako vstupní parametr objekt modelu Eloquentu.
Metoda create() očekává jako vstupní parametr pole. Metoda sama vytvoří z dat v poli objekt modelu Eloquentu a poté jej uloží.
Metoda save()
1. Vytvoříme nový objekt komentáře a naplníme jej daty:
$comment = new App\Comment([ 'title' => 'Nadpis nového komentáře', 'message' => 'Zpráva nového komentáře', ]);
2. Získáme objekt článku, ke kterému chceme komentář vložit:
$post = App\Post::find(1);
3. Nově vytvořený komentář k článku uložíme pomocí metody save():
$post->comments()->save($comment);
Upozornění: nevoláme dynamickou vlastnost comments (která vrací objekt Illuminate\Database\Eloquent\Collection) třídy Post ale její metodu comments(), která vrací instanci vazby (Illuminate\Database\Eloquent\Relations\HasMany).
Metoda save() automaticky zadá správnou hodnotu cizího klíče post_id objektu Comment.
Vložení více záznamů najednou – metoda saveMany()
Stejným způsobem lze přidat více záznamů najednou. Místo metody save() voláme metodu saveMany(), které předáme pole obsahující objekty modelu komentářů:
$post->comments()->saveMany([ new App\Comment([ 'title' => 'Nadpis prvního nového komentáře', 'message' => 'Zpráva prvního nového komentáře', ]), new App\Comment([ 'title' => 'Nadpis druhého nového komentáře', 'message' => 'Zpráva druhého nového komentáře', ]), ]);
Metoda create()
Metoda create() očekává jako vstupní parametr pole.
Metoda vytvoří objekt modelu a uloží jej do databáze.
1. Vytvoříme pole s daty pro nový komentář:
$comment_array = [ 'title' => 'Nadpis nového komentáře', 'message' => 'Zpráva nového komentáře', ];
2. Získáme objekt článku, ke kterému chceme komentář vložit:
$post = App\Post::find(1);
3. Data komentáře uložíme k článku pomocí metody create():
$comment = $post->comments()->create($comment_array);
Vložení více záznamů najednou – metoda createMany()
$post = App\Post::find(1); $post->comments()->createMany([ [ 'title' => 'Nadpis prvního nového komentáře', 'message' => 'Zpráva prvního nového komentáře', ], [ 'title' => 'Nadpis druhého nového komentáře', 'message' => 'Zpráva druhého nového komentáře', ], ]);
Zásadní výhodou všech uvedených funkcí: save(), create(), saveMany() a createMany() je skutečnost, že není třeba manuálně zadávat cizí klíče pro propojení vazby a nemůže se tak stát, že např. v uvedeném případě omylem přidáme komentář k jinému článku, než bychom chtěli.