belongsTo(ArticleNature::class); } public function invoiceItems() { return $this->hasMany(InvoiceItem::class); } public function offers() { return $this->hasMany(Offer::class); } public function prices() { return $this->hasMany(Price::class); } public function product() { return $this->morphTo(); } public function tags() { return $this->morphToMany(Tag::class, 'taggable'); } public function scopeByArticle($query, $id) { return $query->where($this->table . '.id', $id); } public function scopeByAutocomplete($query, $str) { return $query->where($this->table . '.name', 'LIKE', "%${str}%"); } public function scopeByArticleNature($query, $id) { return $query->where($this->table . '.article_nature_id', $id); } public function scopeByCategory($query, $category_id) { return $query->whereHas('categories', function ($query) use ($category_id) { $query->where('id', $category_id); }); } public function scopeByProduct($query, $model) { return $query->where($this->table . '.product_type', $model); } public function scopeByProductId($query, $model_id) { return $query->where($this->table . '.product_id', $model_id); } public function scopeWithOffers($query) { return $query->has('offers'); } public function scopeWithCurrentOffers($query) { return $query->whereHas('offers', function ($query) { $query->where('status_id', 1); }); } }