使用最新版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 回答
![?](http://img1.sycdn.imooc.com/545867280001ed6402200220-100-100.jpg)
呼唤远方
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;
![?](http://img1.sycdn.imooc.com/533e4d660001312002000200-100-100.jpg)
慕妹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 关注
- 1367 浏览
添加回答
举报
0/150
提交
取消