wqy
2021-04-30 20:54:26
1409

添加一条数据

创建表user

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id',
  `nickname` varchar(20) NOT NULL DEFAULT '' COMMENT '昵称',
  `password` varchar(255) NOT NULL DEFAULT '' COMMENT '密码',
  `create_time` bigint(12) NOT NULL DEFAULT '0' COMMENT '注册时间',
  `extra_info` text COMMENT '扩展信息',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

 

1 使用save添加数据

 

$data = [
            'nickname'=>'我是一个nickname',
            'create_time'=>time(),
            'password'=>Str::password()
        ];

        $user = Db::name('user')->save($data);

        dump($user);

返回结果:1

 

成功插入后,返回结果是添加成功的条数

 

该方式新增数据,会自动判断是新增还是更新数据(以写入数据中是否存在主键数据为依据)。

 

尝试改变数组中字段

  $data =   [
            'nickname'=>'我是一个nickname',
            'create_time'=>time(),
            'password-1'=>Str::password()
        ];

 

返回结果 :

not support data:password-1

 

 $data =   [
            'nickname'=>'我是一个nickname',
            'create_time'=>time(),
            'password_1'=>Str::password()
        ];

 

 $data =   [
            'nickname'=>'我是一个nickname',
            'create_time'=>time(),
            'password_1'=>Str::password()
        ];

 

返回结果:

数据表字段不存在:[password_1]

 

可以看到如果字段不符合要求,会直接抛出异常,所以这里只需要 全局捕获异常即可

 

2 使用insert添加数据

 

        $data =   [
            'nickname'=>'我是一个nickname',
            'create_time'=>time(),
            'password'=>Str::password()
        ];

        $user = Db::name('user')->insert($data);;

        echo  $user;

返回结果:1

 

insert 方法添加数据成功返回添加成功的条数,通常情况返回 1

 

如果不希望抛出异常,可以使用下面的方法:

 $data =   [
            'nickname'=>'我是一个nickname',
            'create_time'=>time(),
            'password1'=>Str::password()
        ];

        $user = Db::name('user')->strict(false)->insert($data);

 

这里password1 在数据表中是不存在,但是 通过strict 强制让插入数据 时不抛出异常,这里 password的值是为空的 

不存在字段的值将会直接抛弃。

 

 

添加数据后如果需要返回新增数据的自增主键,可以使用insertGetId方法新增数据并返回主键值

 

$user =  Db::name('user')->insertGetId($data);