belongsTo(Airflow::class); } /** * Связь с моделью User. */ public function user() { return $this->belongsTo(User::class); } /** * Связь с моделью DAGRun. */ public function runs() { return $this->hasMany(dag_run::class); } protected static function booted() { static::updated(function ($dag) { $changes = $dag->getChanges(); // Исключаем системные поля unset($changes['updated_at']); if (!empty($changes)) { $original = $dag->getOriginal(); $changedData = []; foreach ($changes as $key => $value) { $changedData[$key] = [ 'old' => $original[$key] ?? null, 'new' => $value, ]; } dag_historie::create([ 'dag_id' => $dag->id, 'user_id' => Auth::id() ?? $dag->user_id, // Учитываем случаи, когда нет аутентифицированного пользователя 'change_description' => 'Обновление DAG', 'changed_data' => $changedData, ]); } }); } /** * Связь с историей изменений DAG. */ public function histories() { return $this->hasMany(dag_historie::class); } }