如何在CodeIgniter-3中执行数据库种子操作插入用户数据?
在CodeIgniter 3中给User表插入种子数据的实操指南
嘿,刚好有过CI3做种子数据的经验,给你一步步捋清楚怎么操作:
1. 先创建种子文件
CI3的种子文件默认放在application/database/seeds目录下,如果这个目录不存在,手动新建一个就行。
新建一个名为Users_seed.php的文件(注意文件名首字母要大写,类名必须和文件名完全一致),示例代码如下:
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Users_seed extends CI_Seeder { public function run() { // 准备要插入的用户数据,密码一定要加密后存储 $user_list = [ [ 'username' => 'admin', 'password' => password_hash('admin@123', PASSWORD_DEFAULT), // 替换成你需要的密码 'created_at' => date('Y-m-d H:i:s') // 如果表有创建时间字段就加上,没有可以删掉 ], [ 'username' => 'test_user', 'password' => password_hash('test@456', PASSWORD_DEFAULT), 'created_at' => date('Y-m-d H:i:s') ] // 可以继续添加更多测试用户 ]; // 批量插入数据到user表,效率比单条插更高 $this->db->insert_batch('user', $user_list); // 如果是单条插入,用这个写法: // $this->db->insert('user', $single_user_data); } }
小提醒:如果你的user表有其他必填字段(比如邮箱、状态),记得在数据数组里补充对应的内容;密码加密推荐用PHP原生的
password_hash,比CI自带的加密类更适合存储用户密码。
2. 运行种子数据
CI3支持两种运行方式,推荐用命令行,更便捷:
方式一:命令行操作(优先选这个)
在项目根目录打开终端,执行这条命令:
php index.php migrate seed Users_seed
这里的Users_seed就是你刚才创建的种子类名称。
方式二:Web访问触发(适合没有命令行权限的场景)
可以在某个测试控制器里加一个方法来调用种子:
public function execute_seed() { $this->load->library('migration'); $this->migration->seed('Users_seed'); echo '种子数据插入完成!'; }
然后访问对应的路由(比如http://你的域名/控制器名/execute_seed)就能执行了。
3. 避免重复插入的小技巧
如果担心重复运行种子会生成重复数据,可以加个判断逻辑:
// 测试环境可以先清空表(生产环境千万别这么干!) // $this->db->truncate('user'); // 或者判断用户名是否存在,不存在再插入 foreach ($user_list as $user) { if (!$this->db->get_where('user', ['username' => $user['username']])->row()) { $this->db->insert('user', $user); } }
这样就能顺利给user表插入种子数据啦,如果遇到表结构不匹配、权限问题之类的,随时说~
内容的提问来源于stack exchange,提问作者Sukhpal Singh
相关产品推荐
相关产品推荐

