Obtener post dado la etiqueta, relación de tipo muchos a muchos inversas en Laravel

- Andrés Cruz

In english
Obtener post dado la etiqueta, relación de tipo muchos a muchos inversas en Laravel

Muchas veces es necesario obtener los registros de una entidad principal dado la secundaria en una relación de tipo muchos a muchos; la relación típica es que tenemos una relación de tipo muchos a muchos entre los posts y etiquetas o tags y queremos obtener los posts que pertenezcan a ciertas etiquetas; para ello, podemos hacer una consulta como la siguiente:

 Post::whereHas('tags', function($q) {
       $q->where('tag_id', 1);
   
    })->whereHas('tags', function($q) {
       $q->where('tag_id', 4);
   
    })->get();

O si las etiquetas son dinámicas:

$tag_ids=[25,40,30];
    Post::where(function($query)use($tag_ids){
        foreach ($id as $value){
            $query->whereHas('tags',function ($query)use($value){
                $query->where('tag_id',$value);
            });
        }
    })->get();

El modelo de post luce como:

class Post extends Model
{
    public function tags()
    {
        return $this->belongsToMany(Tag::class, 'post_tags', 'post_id', 'tag_id');
    }

}
Andrés Cruz

Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter

Andrés Cruz en Udemy

Acepto recibir anuncios de interes sobre este Blog.