|null $embedding */ class Article extends Model { protected $fillable = [ 'title', 'content', 'note', 'allowed_actions', 'status', 'is_ai_draft', 'embedding', 'source', 'source_url', 'source_article_id', 'category_id', 'subcategory_id', 'source_ticket_id', ]; protected $casts = [ 'embedding' => VectorCast::class, 'allowed_actions' => 'array', 'is_ai_draft' => 'boolean', ]; public function decisions(): HasMany { return $this->hasMany(AIDecision::class); } public function category(): BelongsTo { return $this->belongsTo(Category::class, 'category_id'); } public function subcategory(): BelongsTo { return $this->belongsTo(Category::class, 'subcategory_id'); } public function sourceTicket(): BelongsTo { return $this->belongsTo(Ticket::class, 'source_ticket_id'); } public function chunks(): HasMany { return $this->hasMany(ArticleChunk::class); } public function quickReplies(): BelongsToMany { return $this->belongsToMany(QuickReply::class)->withTimestamps(); } public function activeQuickReplies(): BelongsToMany { return $this->quickReplies()->where('is_active', true); } }