mv_medicalhistory_summary.id, * rf_kl_HospRefusalID, DateTime, FAM/Name/OT, rf_StationarTypeID, ... * Признак отказа = сам факт наличия строки с rf_MedicalHistoryID * (по причинам/типам не фильтруем). */ class MisDenial extends MaterializedViewModel { protected $table = 'stt_denial'; // TODO: подставить реальное имя таблицы в реплике protected $primaryKey = 'DenialID'; private static ?bool $tableExists = null; public function medicalHistory() { return $this->belongsTo(MedicalHistory::class, 'rf_MedicalHistoryID', 'id'); } /** * Доступна ли таблица отказов в текущей БД (реплике). * Мемоизируем на процесс, чтобы не дёргать information_schema на каждый запрос. */ public static function tableAvailable(): bool { return self::$tableExists ??= Schema::hasTable((new self)->getTable()); } }