*/ use HasFactory; /** * @return array */ protected function casts(): array { return [ 'acceptance_criteria_data' => 'array', 'is_blocked' => 'boolean', ]; } public function assignee(): BelongsTo { return $this->belongsTo(User::class, 'assignee_user_id'); } public function author(): BelongsTo { return $this->belongsTo(User::class, 'author_user_id'); } public function childTickets(): HasMany { return $this->hasMany(Ticket::class, 'parent_ticket_id') ->orderBy('sequence_number'); } public function fieldValues(): HasMany { return $this->hasMany(TicketFieldValue::class) ->orderBy('ticket_field_definition_id'); } public function parentTicket(): BelongsTo { return $this->belongsTo(Ticket::class, 'parent_ticket_id'); } public function ticketLinksAsSource(): HasMany { return $this->hasMany(TicketLink::class, 'source_ticket_id') ->orderBy('id'); } public function ticketLinksAsTarget(): HasMany { return $this->hasMany(TicketLink::class, 'target_ticket_id') ->orderBy('id'); } public function project(): BelongsTo { return $this->belongsTo(Project::class); } public function ticketPriority(): BelongsTo { return $this->belongsTo(TicketPriority::class); } public function ticketStatus(): BelongsTo { return $this->belongsTo(TicketStatus::class); } public function ticketType(): BelongsTo { return $this->belongsTo(TicketType::class); } public function worklogEntries(): HasMany { return $this->hasMany(TicketWorklogEntry::class) ->orderByDesc('created_at') ->orderByDesc('id'); } }