$executions * @property ?ScriptExecution $lastExecution * @property User $user * @property ?int $project_id * @property ?Project $project */ class Script extends AbstractModel { /** @use HasFactory<\Database\Factories\ScriptFactory> */ use HasFactory; protected $fillable = [ 'user_id', 'name', 'content', 'project_id', ]; protected $casts = [ 'user_id' => 'int', 'project_id' => 'int', ]; public static function boot(): void { parent::boot(); static::deleting(function (Script $script): void { $script->executions()->delete(); }); } /** * @return BelongsTo */ public function user(): BelongsTo { return $this->belongsTo(User::class); } /** * @return BelongsTo */ public function project(): BelongsTo { return $this->belongsTo(Project::class); } /** * @return array */ public function getVariables(): array { $variables = []; preg_match_all('/\${(.*?)}/', $this->content, $matches); $variables = $matches[1]; return array_unique($variables); } /** * @return HasMany */ public function executions(): HasMany { return $this->hasMany(ScriptExecution::class); } /** * @return HasOne */ public function lastExecution(): HasOne { return $this->hasOne(ScriptExecution::class)->latest(); } /** * @return Builder