Trabalhando com relacionamentos many-to-many no Laravel

Imagine que estamos desenvolvendo um blog em Laravel onde temos uma tabela chamadas posts (para registrar nossos posts), outra chamada tags (para registrar as tags de nossos posts) e por fim uma tabela chamada posts_tags (onde será relacionando o post_id com a tag_id). Nesse post vamos  ver como criar o relacionamento entre essas tabelas no Laravel.

Para relacionarmos nosso model Post com a tabela posts_tags e podermos acessar as tags de nosso post, definimos o método abaixo no model Post.

public function tags()
{
    return $this->belongsToMany('App\Tag', 'posts_tags');
}

Pronto, nosso model Post já está relacionado com a tabela posts_tags.

Agora para relacionarmos nosso model Tag com a tabela posts_tags e podermos acessar os posts que contém um determinada tag, definimos o método abaixo no model Tag.

public function posts()
{
    return $this->belongsToMany('App\Post', 'posts_tags');
}

Feito isso, nosso relacionamento many-to-many já está configurado e funcionando.

Relacionando um Post com algumas tags

Agora que temos nosso relacionamento configurado, vamos ver como vincular e desvincular tags a um post.

Imagine que temos as tags [1 => ‘programação’, 2 => ‘php’, 3 => ‘laravel’, 4 => ‘web’] e que desejamos relacionar as  tags 1, 2 e 3 no post com ID 5.

Podemos fazer isso usando o método attach() que irá anexar os itens informado ao relacionamento.

$post = App\Post::find(5);
$post->tags()->attach([1, 2, 3]);

Caso queira desanexar uma tag  do post, basta usar o método detach().

$post = App\Post::find(5);
$post->tags()->detach(3);

Ou você pode simplesmente usar o método sync(), que ira realizar o attach e o detach necessário para que o relacionamento fique exatamente da maneira que você informar no sync().

$post = App\Post::find(5);
$post->tags()->sync([1, 3, 4]);

Marcos de P. Muniz

Graduado em Sistemas de Informação pela UEMG, é Pós Graduado em Segurança da Informação pela Faculdade Pitágoras, é desenvolvedor PHP desde 2006, trabalha como Analista / Desenvolvedor em uma empresa que atua na área de ensino a distância, faz freelancer criando sites, sistemas e portais utilizando PHP, MySQL e jQuery.

Você pode gostar...

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *