dbmsv4 init...5

This commit is contained in:
최준흠 2026-02-26 17:47:24 +09:00
parent 9b805c755d
commit 8948974c4e
3 changed files with 41 additions and 65 deletions

View File

@ -62,6 +62,9 @@ class ServerHelper extends EquipmentHelper
'template' => 'serverlist', 'template' => 'serverlist',
]); ]);
break; break;
case 'viewer':
$value = $viewDatas['entity']->getViewer() ? $this->getListButton('console', "", $viewDatas) : "";
break;
default: default:
$value = parent::getFieldView($field, $value, $viewDatas, $extras); $value = parent::getFieldView($field, $value, $viewDatas, $extras);
break; break;

View File

@ -199,44 +199,19 @@ abstract class CommonService
} }
} }
//CURD 결과처리용 //CURD 결과처리용
protected function handle_save_result(mixed $result, int|string $uid): int|string
{
if ($result === false) {
$errors = $this->model->errors();
$errorMsg = is_array($errors) ? implode(", ", $errors) : "DB 저장 작업이 실패했습니다.";
throw new RuntimeException(static::class . '->' . __FUNCTION__ . "에서 오류발생: " . $errorMsg);
}
$pk = $uid; // 기본적으로 기존 $uid (업데이트의 경우)
// AUTO_INCREMENT 필드를 사용하는 경우, INSERT 작업이라면 새로 생성된 ID를 가져옵니다.
// INSERT 작업은 보통 $uid가 0 또는 null/빈 문자열일 때 실행됩니다.
if ($this->model->useAutoIncrement() && (empty($uid) || $uid === 0)) {
// CodeIgniter 모델의 getInsertID()를 사용하여 새로 생성된 PK를 확실히 가져옵니다.
$insertID = $this->model->getInsertID();
if ($insertID > 0) {
$pk = $insertID;
}
} elseif ($this->model->useAutoIncrement() && is_numeric($result) && (int) $result > 0) {
// save()가 성공적인 INSERT 후 PK를 반환하는 경우를 대비 (CI4의 동작)
$pk = (int) $result;
}
// 최종적으로 PK가 유효한지 확인합니다.
if (empty($pk)) {
$errors = $this->model->errors();
$errorMsg = is_array($errors) && !empty($errors) ? implode(", ", $errors) : "DB 작업 성공 후 PK를 확인할 수 없거나 모델 오류 발생:{$pk}";
throw new RuntimeException(static::class . '->' . __FUNCTION__ . "에서 오류발생: " . $errorMsg);
}
return $pk;
}
protected function save_process(CommonEntity $entity): CommonEntity protected function save_process(CommonEntity $entity): CommonEntity
{ {
try { try {
// INSERT 시 Entity의 PK는 0 또는 NULL이어야 함 (DB가 ID를 생성하도록) if (!$this->model->save($entity)) {
$initialPK = $entity->getPK(); $errors = $this->model->errors();
$result = $this->model->save($entity); $errorMsg = is_array($errors) ? implode(", ", $errors) : "DB 저장 작업이 실패했습니다.";
// 최종적으로 DB에 반영된 PK를 반환받습니다. (UPDATE이면 기존 PK, INSERT이면 새 PK) throw new RuntimeException(static::class . '->' . __FUNCTION__ . "에서 오류발생: " . $errorMsg);
$entity->{$this->getPKField()} = $this->handle_save_result($result, $initialPK); }
// handle_save_result에서 확인된 최종 PK를 사용하여 DB에서 최신 엔티티를 가져옴 // CodeIgniter 모델의 getInsertID()를 사용하여 새로 생성된 PK를 확실히 가져옵니다.
if ($this->model->useAutoIncrement()) {
$entity->{$this->getPKField()} = $this->model->getInsertID();
}
return $entity; return $entity;
} catch (\Throwable $e) { } catch (\Throwable $e) {
log_message('debug', __FUNCTION__ . ":" . var_export($entity, true)); log_message('debug', __FUNCTION__ . ":" . var_export($entity, true));

View File

@ -1,35 +1,33 @@
<table class="table table-bordered table-striped"> <table class="table table-bordered table-striped">
<?php foreach ($serverCellDatas['entities'] as $entity): ?> <?php foreach ($serverCellDatas['entities'] as $entity): ?>
<?php $serverCellDatas['entity'] = $entity ?> <?php $serverCellDatas['entity'] = $entity ?>
<tr class="text-center"> <tr class="text-center">
<th style="width: 150px"> <th style="width: 150px">
<?= $serverCellDatas['serviceEntity']->getServerInfoUid() == $entity->getPK() ? "📌" : "<a href=\"/admin/customer/service/changeServer/{$serverCellDatas['serviceEntity']->getPK()}?serverinfo_uid={$entity->getPK()}\">✔️</a>" ?> <?= $serverCellDatas['serviceEntity']->getServerInfoUid() == $entity->getPK() ? "📌" : "<a href=\"/admin/customer/service/changeServer/{$serverCellDatas['serviceEntity']->getPK()}?serverinfo_uid={$entity->getPK()}\">✔️</a>" ?>
<?= $serverCellDatas['serverPartHelper']->getFieldView('SERVER', "", ['serverEntity' => $entity]) ?> <?= $serverCellDatas['serverPartHelper']->getFieldView('SERVER', "", ['serverEntity' => $entity]) ?>
<?= "<a href=\"/admin/customer/service/terminateServer/{$serverCellDatas['serviceEntity']->getPK()}?serverinfo_uid={$entity->getPK()}\">❌</a>" ?> <?= "<a href=\"/admin/customer/service/terminateServer/{$serverCellDatas['serviceEntity']->getPK()}?serverinfo_uid={$entity->getPK()}\">❌</a>" ?>
</th> </th>
<th>파트정보</th> <th>파트정보</th>
</tr> </tr>
<tr class="text-center"> <tr class="text-center">
<td nowrap> <td nowrap>
<div>
<?= $serverCellDatas['helper']->getFieldView('switchinfo_uid', $entity->getSwitchInfoUid(), $serverCellDatas) ?>
</div>
<div><?= $entity->getTitle() ?></div>
<div><?= $entity->getIP() ?></div>
<div><?= $entity->getOS() ?></div>
<div>금액 : <span class="text-danger"><?= number_format($entity->getPrice()) ?></span>원</div>
<?php if ($serverCellDatas['entity']->getViewer()): ?>
<div> <div>
<?= $serverCellDatas['helper']->getListButton('console', "", $serverCellDatas) ?> <?= $serverCellDatas['helper']->getFieldView('switchinfo_uid', $entity->getSwitchInfoUid(), $serverCellDatas) ?>
</div> </div>
<?php endif; ?> <div><?= $entity->getTitle() ?></div>
</td> <div><?= $entity->getIP() ?></div>
<td> <div><?= $entity->getOS() ?></div>
<?= view_cell("\App\Cells\Equipment\ServerPartCell::parttable", [ <div>금액 : <span class="text-danger"><?= number_format($entity->getPrice()) ?></span>원</div>
'serverinfo_uid' => $entity->getPK(), <div>
'types' => SERVERPART['ALL_PARTTYPES'] <?= $serverCellDatas['helper']->getFieldView('viewer', $serverCellDatas['entity']->getViewer(), $serverCellDatas) ?>
]) ?> </div>
</td> </td>
</tr> <td>
<?php endforeach; ?> <?= view_cell("\App\Cells\Equipment\ServerPartCell::parttable", [
'serverinfo_uid' => $entity->getPK(),
'types' => SERVERPART['ALL_PARTTYPES']
]) ?>
</td>
</tr>
<?php endforeach; ?>
</table> </table>