$rule_groups * @property Collection|array $rules * @property bool $is_smart * @property string $name * @property user $user * * @method static Builder orderBy(string $field, string $order = 'asc') */ class Playlist extends Model { use Searchable; use HasFactory; protected $hidden = ['user_id', 'created_at', 'updated_at']; protected $guarded = ['id']; protected $casts = [ 'rules' => SmartPlaylistRulesCast::class, ]; protected $appends = ['is_smart']; public function songs(): BelongsToMany { return $this->belongsToMany(Song::class); } public function user(): BelongsTo { return $this->belongsTo(User::class); } protected function isSmart(): Attribute { return Attribute::get(fn (): bool => $this->rule_groups->isNotEmpty()); } protected function ruleGroups(): Attribute { // aliasing the attribute to avoid confusion return Attribute::get(fn () => $this->rules); } /** @return array */ public function toSearchableArray(): array { return [ 'id' => $this->id, 'name' => $this->name, ]; } }