猿问

thinkphp5连接oracle用insert插入数据失败

使用最新版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没有值)
https://img4.mukewang.com/5c8f59ac00013c4408000145.jpg

Smart猫小萌
浏览 1368回答 4
4回答

呼唤远方

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;

幕布斯6054654

不了解 thinkphp 跟 Oracle 的结合。楼主有没有试过这个方法:【oracle的使用】在thinkphp5中使用oracle

慕妹3146593

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;
随时随地看视频慕课网APP
我要回答