Skip to content

Instantly share code, notes, and snippets.

@NandoKstroNet
Created July 28, 2021 18:26
Show Gist options
  • Save NandoKstroNet/5b98f526c635281f3ee11e8a5f791ce0 to your computer and use it in GitHub Desktop.
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
<?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