morphedByMany(Article::class, 'categorizable'); } public function ArticlesByParent() { } public function ArticlesTagged() { return $this->tags->articles; } public function categorizables() { return $this->hasMany(Categorizable::class); } public function countArticlesTagged() { return $this->tags()->withCount('Articles'); } public function scopeByCategory($query, $category_id) { return $query->where('category_id', $category_id); } public function scopeVisible($query) { return $query->where('visible', 1); } public function scopeHomepage($query) { return $query->where('homepage', 1); } public function scopeNotRoot($query) { return $query->where('id', '<>', 1); } public function scopeInRange($query, $_lft, $_rgt) { return $query->where('_lft', '>=', $_lft)->where('_rgt', '<=', $_rgt); } public function scopeHasAvailableOffers($query, $sale_channel_id = false) { $sale_channel_id = $sale_channel_id ? $sale_channel_id : SaleChannels::getDefaultID(); return $query->whereHas('articles', function ($query) use ($sale_channel_id) { $query->WithAvailableOffers($sale_channel_id); }); } public function scopeHasAvailableOffersByCategoryParent($query, $sale_channel_id = false) { $sale_channel_id = $sale_channel_id ? $sale_channel_id : SaleChannels::getDefaultID(); return $query->whereHas('articles', function ($query) use ($sale_channel_id) { $query->WithAvailableOffers($sale_channel_id); }); } }