'datetime', ]; public function seance(): BelongsTo { return $this->belongsTo(Seance::class); } public function eleve(): BelongsTo { return $this->belongsTo(Eleve::class); } public function lab(): BelongsTo { return $this->belongsTo(Lab::class); } public function machines(): HasMany { return $this->hasMany(LabSessionMachine::class); } /** * Relie une stack prête à cette session : venue du stock chaud * (SeanceController::admettre) ou construite à la demande (CreerStackLab). * * @param array{nom: string, id: string, instances: array} $stack */ public function attribuerStack(array $stack): void { DB::transaction(function () use ($stack) { $this->machines()->delete(); foreach ($stack['instances'] as $nom => $instanceId) { $this->machines()->create(['nom' => $nom, 'instance_id' => $instanceId]); } $this->forceFill([ 'heat_stack_name' => $stack['nom'], 'heat_stack_id' => $stack['id'], 'etat' => self::ACTIF, 'raison_echec' => null, ])->save(); }); } public function corrections(): HasMany { return $this->hasMany(Correction::class); } public function derniereCorrection(): HasOne { return $this->hasOne(Correction::class)->latestOfMany(); } }