Created
July 28, 2021 18:26
-
-
Save NandoKstroNet/5b98f526c635281f3ee11e8a5f791ce0 to your computer and use it in GitHub Desktop.
Exemplo de muitos pra muitos relacionamento - Curso Laravel Mastery | http://laravelmastery.com.br
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
//Associando categorias existentes a um Evento | |
$categories = [1,2,3,4]; // Id das categorias recuperados do banco | |
$event = \App\Models\Event::find(1); | |
//Adiciona, na ligação da tabela intermediária/pivot, as 4 categorias recuperadas anteriorment na variável $categories | |
$event->categories()->attach($categories); | |
//Remove, da ligação da tabela intermediária/pivot, as 4 categorias recuperadas anteriormente na variável $categories | |
$event->categories()->detach($categories); | |
//Adiciona, na ligação da tabela intermediária/pivot, as 4 categorias recuperadas anteriorment na variável $categories | |
//se no array, por exemplo, faltar a categoria 3, o sync irá remover ela da ligação, no sync sempre vale o valor do array informado, o que não estiver nele será removido | |
$event->categories()->sync($categories); | |
//Adiciona, na ligação da tabela intermediária/pivot, as 4 categorias recuperadas anteriorment na variável $categories | |
//O toggle diferente do sync, ele adiciona ou remove as ligações se existirem ou não no array. Por exemplo: | |
//Se na ligação existir a categoria de id 3 mas no array que você informar ela não for, o toggle remove, em outro momento | |
//se você mandar a categoria 3 no array o toggle irá adicionar, no pensamento liga/desliga do toggle. | |
$event->categories()->toggle($categories); | |
//Você pode criar a categoria ou o evento no momento que for salvar também, como são M-M os dados lados trabalham com a mesma | |
//interface de trabalho, então o que eu mostrar aqui do ponto de vista de um evento serve pro ponto de vista de uma categoria | |
//Podemos criar uma categoria no momento de associá-la ao evento usando Mass Assignment ou Active Record: | |
//Active Record | |
$category = new \App\Models\Category(); | |
$category->name = 'Exemplo'; | |
$event = \App\Models\Event::find(1)->categories()->save($category); | |
//Mass Assignment | |
$category = ['name' => 'Exemplo 2']; | |
$event = \App\Models\Event::find(1)->categories()->create($category); | |
//Você pode criar muitas categorias no momento da associação também, tanto usando Mass Assignment quanto Active Record: | |
//Active Record: saveMany | |
$categories = []; | |
$categories[] = (new \App\Models\Category())->name = 'Exemplo'; | |
$categories[] = (new \App\Models\Category())->name = 'Exemplo 2'; | |
$event = \App\Models\Event::find(1)->categories()->saveMany($categories); | |
//Mass Assignment: createMany | |
$categories = [ | |
['name' => 'Exemplo'], | |
['name' => 'Exemplo 2'] | |
]; | |
$event = \App\Models\Event::find(1)->categories()->createMany($categories); | |
//A recuperação de muitos pra muitos é tranquilo, de ambos os lados buscados teremos uma collection com os dados da relação. | |
//Por exemplo buscando pelo evento de id 1 podemos recuperar suas categorias: | |
$event = \App\Models\Event::find(1); | |
$event->categories; //Retornará uma collection com os models Category populados com as categorias associadas a este evento | |
$event->categories(); //Retornará um objeto BelongsToMany, que permite a interação com os dados da ligação. | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment