morphToMany(Tag::class, 'taggable'); } public function Genre(): BelongsTo { return $this->belongsTo(Genre::class); } public function Varieties(): HasMany { return $this->hasMany(Variety::class); } public function Articles(): MorphMany { return $this->morphMany(Article::class, 'product'); } public function scopeByName($query, $name) { return $query->where($this->table.'.name', $name); } public function scopeByTag($query, $tagId) { return $tagId ? $query->whereHas('tags', function ($query) use ($tagId) { $query->byId($tagId); }) : $query; } public function scopeByTags($query, $tags) { return $tags ? $query->whereHas('tags', function ($query) use ($tags) { $query->byIds($tags); }) : $query; } }