数据插入insert(array $data,$returnSql=false,$type='INSERT')
insert方法可以插入单条数据,也可以插入多条数据, 成功返回为最后一条主键id号,失败返回空$data要插入的数据,$returnSql不操作数据加直接返回sql语句,$type插入类型有INSERT, INSERT IGNORE, INSERT OR IGNORE, REPLACE, DUPLICATE
使用示例
1. 标准插入(默认)
// 单条插入
$data = ['name' => '张三', 'email' => 'zhangsan@example.com'];
$result = Db::table('users')->insert($data);
// 批量插入
$multiData = [
['name' => '张三', 'email' => 'zhangsan@example.com'],
['name' => '李四', 'email' => 'lisi@example.com']
];
$result = Db::table('users')->insert($multiData);
// 获取新插入数据的ID
$newId = Db::insertId();
2. 忽略错误插入(INSERT IGNORE)
当插入的数据违反唯一约束时,不报错而是跳过
// 使用 INSERT IGNORE
$data = ['id' => 1, 'name' => '张三', 'email' => 'zhangsan@example.com'];
$result = Db::table('users')->insert($data, false, 'INSERT IGNORE');
// 简写形式也可以
$result = Db::table('users')->insert($data, false, 'IGNORE');
3. 替换插入(REPLACE)
如果存在相同主键或唯一索引的记录,则先删除再插入
// 使用 REPLACE INTO
$data = ['id' => 1, 'name' => '张三', 'email' => 'new@example.com'];
$result = Db::table('users')->insert($data, false, 'REPLACE');
4. 插入重复时更新(ON DUPLICATE KEY UPDATE)
当主键或唯一索引冲突时,更新记录而不是报错
// 使用 ON DUPLICATE KEY UPDATE
$data = ['id' => 1, 'name' => '张三', 'email' => 'update@example.com', 'login_count' => 5];
$result = Db::table('users')->insert($data, false, 'DUPLICATE');
返回SQL而不执行
所有类型都支持返回SQL而不执行:
// 获取 REPLACE INTO 的SQL语句
$sql = Db::table('users')->insert($data, true, 'REPLACE');
// 或者使用链式调用的getSql()方法
$sql = Db::table('users')->getSql()->insert($data, false, 'REPLACE');
注意事项
- 参数顺序:
insert($data, $returnSql, $type)
- 第一个参数为一维数组或二维数组,第二个参数是控制是否返回SQL,第三个参数是插入类型 - 插入类型参数不区分大小写,内部会转换为大写
- 使用 DUPLICATE 类型时,会自动为所有字段添加
column = VALUES(column)
更新语句