50 lines
1.8 KiB
PHP
50 lines
1.8 KiB
PHP
<?php
|
|
namespace App\Models\Entities;
|
|
|
|
use CodeIgniter\Model;
|
|
|
|
class V2stdailyModel extends Model
|
|
{
|
|
protected $table = 'v2_st_daily';
|
|
protected $primaryKey = 'id'; // 실제 PK 컬럼명으로 수정하세요 (st_date, cpid, gbn_cd가 복합키인 경우도 있음)
|
|
protected $allowedFields = ['st_date', 'cpid', 'gbn_cd', 'cnt'];
|
|
|
|
public function set_v2_st_daily($st_date, $cpid, $gbn_cd, $cnt, $cnt_type = 'add')
|
|
{
|
|
if (empty($cnt)) $cnt = 0;
|
|
|
|
$data = [];
|
|
// 1. 날짜 처리
|
|
$date_field = empty($st_date) ? "NOW()" : "?";
|
|
if (!empty($st_date)) $data[] = $st_date;
|
|
|
|
// 2. 나머지 필드 바인딩 데이터 준비
|
|
$data[] = $cpid;
|
|
$data[] = $gbn_cd;
|
|
$data[] = $cnt;
|
|
|
|
// 3. 중복 처리 로직 분기
|
|
if (strtolower($cnt_type) === 'add') {
|
|
// MariaDB에서 가장 안전한 바인딩 방식
|
|
$sql = "INSERT INTO v2_st_daily (st_date, cpid, gbn_cd, cnt)
|
|
VALUES ($date_field, ?, ?, ?)
|
|
ON DUPLICATE KEY UPDATE cnt = cnt + ?";
|
|
$data[] = $cnt; // UPDATE 절의 더하기 값을 위해 한 번 더 추가
|
|
} else {
|
|
// 중복 시 값을 덮어씌움 (VALUES 함수 사용)
|
|
$sql = "INSERT INTO v2_st_daily (st_date, cpid, gbn_cd, cnt)
|
|
VALUES ($date_field, ?, ?, ?)
|
|
ON DUPLICATE KEY UPDATE cnt = VALUES(cnt)";
|
|
}
|
|
|
|
// 쿼리 실행
|
|
$result = $this->db->query($sql, $data);
|
|
|
|
return [
|
|
'status' => $result ? true : false,
|
|
'error' => $this->db->error(), // ['code', 'message']
|
|
'last_query' => (string)$this->db->getLastQuery() // 디버깅용
|
|
];
|
|
}
|
|
|
|
} |