使用最新版TP5框架,insert操作失敗,應該是id的問題,官方沒看到關于oracle介紹,不知道該如何寫,新人,求點撥,附插入mysql的代碼寫法,求改成oracle,(oracle建好序列號,索引)
function writelog($uid,$username,$description,$status)
{
$data['admin_id'] = $uid;
$data['admin_name'] = $username;
$data['description'] = $description;
$data['status'] = $status;
$data['ip'] = request()->ip();
$data['add_time'] = time();
$log = Db::name('think_log')->insert($data);
}
使用上述代碼報錯提示(主鍵ID沒有值)
4 回答

呼喚遠方
TA貢獻1856條經驗 獲得超11個贊
oracle沒有自增字段,LOG_ID字段的值必須人工賦值,人工寫sql的話大概是這樣的:
INSERT INTO TINK_LOG(LOG_ID) VALUES(S_T_THINK_LOG.NEXTVAL)
如果TP不支持取oracle序列的值,可以在表TINK_LOG中創建一個觸發器:
create or replace trigger trg_TINK_LOG
before insert on TINK_LOG
for each row
declare
begin
:new.LOG_ID:= S_T_THINK_LOG.NEXTVAL;
end trg_t1;

慕妹3146593
TA貢獻1820條經驗 獲得超9個贊
oracle主鍵log_id 不能自動遞增
有兩個辦法:
1、使用oracle的自動增長序列
創建序列
create sequence S_T_THINK_LOG
increment by 1 //指定序列以1遞增,如果沒指定,默認值1會使用
start with 1 //由1開始計數
nomaxvalue //不設置最大值
minvalue 1 //設置最小值1
cache 20 //預分配緩存大小為20
order
// 獲取下一個自增ID
public function getNextSeq(){
$sql = "select S_T_THINK_LOG.nextval id from sys.dual";
$result = $this->query($sql);
$nextId = $result[0]['id'];
return $nextId;
}
function writelog($uid,$username,$description,$status)
{
// 注意這里啦
// 注意這里啦
$data['log_id'] = $this->getNextSeq();
$data['admin_id'] = $uid;
$data['admin_name'] = $username;
$data['description'] = $description;
$data['status'] = $status;
$data['ip'] = request()->ip();
$data['add_time'] = time();
$log = Db::name('think_log')->insert($data);
}
第二種,就是樓上說的 觸發器啦
create or replace trigger trg_TINK_LOG
before insert on TINK_LOG
for each row
declare
begin
:think_log.LOG_ID:= S_T_THINK_LOG.NEXTVAL;
end trg_t1;
- 4 回答
- 0 關注
- 1401 瀏覽
添加回答
舉報
0/150
提交
取消