如何在 CodeIgniter 4 中保存到数据库后获取插入 ID
How to get insert id after save to database in CodeIgniter 4
我正在使用 Codeigniter 4。
并像这样插入新数据,
$data = [
'username' => 'darth',
'email' => 'd.vader@theempire.com'
];
$userModel->save($data);
这里提到的是:CodeIgniter’s Model reference
正在插入。
但是我没有找到任何关于插入后获取插入id的参考。
请帮忙!提前致谢。
在研究了CI4框架的核心后得到了一个简单的解决方案
$db = db_connect('default');
$builder = $db->table('myTable');
$data = [
'username' => 'darth',
'email' => 'd.vader@theempire.com'
];
$builder->insert($data);
echo $db->insertID();
希望他们能尽快在文档中添加清晰的描述。
我遇到了同样的问题,但不幸的是,CI4 文档并没有多大帮助。使用构建器的解决方案可行,但它是数据建模的解决方法。我相信你想要一个纯模型解决方案,否则你不会问。
$data = [
'username' => 'darth',
'email' => 'd.vader@theempire.com'
];
$id = $userModel->save($data);
尝试了所有我能想到的方法,我决定存储保存方法的结果,看看是否返回一个布尔值来指示保存是否成功。检查变量,我意识到它 returns 正是我想要的:丢失的 insertID。
我相信 CodeIgniter 4 是一个非常简单且功能强大的框架,它在共享主机中做得不错,如果您正在学习其他框架,但缺少 CI3 的精彩文档和示例,其他框架可能会有点苛刻。希望这只是暂时的。
顺便说一句,只有当您在模型本身之外使用 $userModel 时,您的代码才有效,例如,从控制器。您需要创建一个模型对象,例如:
$userModel = New WhateverNameModel();
$data = [any data];
$userModel->save($data);
或者,如果您在模型本身内部编写一个方法(我最喜欢的方式),您应该写
$this->save($data);
为了克服这个问题,我在 save() 方法中修改了 system/Model.php---
$response = $this->insert($data, false);
// add after the insert() call
$this->primaryKey = $this->db->insertID();
现在,在您的模型中,您只需引用“$this->primaryKey”,它就会为您提供所需的信息,同时保持数据建模功能。
我将把它提交给 CI 开发人员,希望它会被添加进去。
ci4中获取ID的三种方式:
$db = \Config\Database::connect();
$workModel = model('App\Models\WorkModel', true, $db);
$id = $workModel->insert($data);
echo $id;
echo '<br/>';
echo $workModel->insertID();
echo '<br/>';
echo $db->insertID();
CI4
$settings = new SettingsModel();
$settingsData = $settings->find(1);
<?php namespace App\Models;
use App\Models\BaseModel;
class SettingsModel extends BaseModel
{
protected $table = 'users';
protected $primaryKey = 'id';
}
$settings->find(1);将 return 排成一行。它将找到作为 $primaryKey.
提供的值
这也行。
$user= new UserModel();
$data = [
'username' => 'darth',
'email' => 'd.vader@theempire.com'
];
$user->insert($data);
$user_id = $user->getInsertID();
大家好,就我而言,我使用 ci 模型来保存数据,我的代码是:
$x=new X();
$is_insert= $x->save(['name'=>'test','type'=>'ss']);
if($is_insert)
$inserted_id=$x->getInsertID()
我正在为我的数据库使用 mysql 然后我 运行 在我的播种机中
$university = $this->db->table('universities')->insert([
'name' => 'Harvard University'
]);
$faculty = $this->db->table('faculties')->insert([
'name' => 'Arts & Sciences',
'university' => $university->resultID
]);
查看代码第 6 行
$university->resultID
变量$university
这里是CodeIgniter\Database\MySQLi\Result
的类型对象class
如果我错了或有任何改进的余地,请纠正我
其实你做的是对的。
您按照 Codeigniter 4 模型使用指南以最好和最简单的方式做到了。
您刚刚错过了:$id = $userModel->insertID;
使用您的示例完成代码:
$data = [
'username' => 'darth',
'email' => 'd.vader@theempire.com'
];
$userModel->save($data);
$id = $userModel->insertID;
就是这样。如果您使用的是 codeigniter 的模型,则不需要上述示例中的所有代码,也不需要调用数据库服务或数据库构建器。
于 2021 年 3 月 19 日在 CodeIgniter 4.1.1 上测试
我正在使用 Codeigniter 4。
并像这样插入新数据,
$data = [
'username' => 'darth',
'email' => 'd.vader@theempire.com'
];
$userModel->save($data);
这里提到的是:CodeIgniter’s Model reference
正在插入。 但是我没有找到任何关于插入后获取插入id的参考。
请帮忙!提前致谢。
在研究了CI4框架的核心后得到了一个简单的解决方案
$db = db_connect('default');
$builder = $db->table('myTable');
$data = [
'username' => 'darth',
'email' => 'd.vader@theempire.com'
];
$builder->insert($data);
echo $db->insertID();
希望他们能尽快在文档中添加清晰的描述。
我遇到了同样的问题,但不幸的是,CI4 文档并没有多大帮助。使用构建器的解决方案可行,但它是数据建模的解决方法。我相信你想要一个纯模型解决方案,否则你不会问。
$data = [
'username' => 'darth',
'email' => 'd.vader@theempire.com'
];
$id = $userModel->save($data);
尝试了所有我能想到的方法,我决定存储保存方法的结果,看看是否返回一个布尔值来指示保存是否成功。检查变量,我意识到它 returns 正是我想要的:丢失的 insertID。
我相信 CodeIgniter 4 是一个非常简单且功能强大的框架,它在共享主机中做得不错,如果您正在学习其他框架,但缺少 CI3 的精彩文档和示例,其他框架可能会有点苛刻。希望这只是暂时的。
顺便说一句,只有当您在模型本身之外使用 $userModel 时,您的代码才有效,例如,从控制器。您需要创建一个模型对象,例如:
$userModel = New WhateverNameModel();
$data = [any data];
$userModel->save($data);
或者,如果您在模型本身内部编写一个方法(我最喜欢的方式),您应该写
$this->save($data);
为了克服这个问题,我在 save() 方法中修改了 system/Model.php---
$response = $this->insert($data, false);
// add after the insert() call
$this->primaryKey = $this->db->insertID();
现在,在您的模型中,您只需引用“$this->primaryKey”,它就会为您提供所需的信息,同时保持数据建模功能。
我将把它提交给 CI 开发人员,希望它会被添加进去。
ci4中获取ID的三种方式:
$db = \Config\Database::connect();
$workModel = model('App\Models\WorkModel', true, $db);
$id = $workModel->insert($data);
echo $id;
echo '<br/>';
echo $workModel->insertID();
echo '<br/>';
echo $db->insertID();
CI4
$settings = new SettingsModel();
$settingsData = $settings->find(1);
<?php namespace App\Models;
use App\Models\BaseModel;
class SettingsModel extends BaseModel
{
protected $table = 'users';
protected $primaryKey = 'id';
}
$settings->find(1);将 return 排成一行。它将找到作为 $primaryKey.
提供的值这也行。
$user= new UserModel();
$data = [
'username' => 'darth',
'email' => 'd.vader@theempire.com'
];
$user->insert($data);
$user_id = $user->getInsertID();
大家好,就我而言,我使用 ci 模型来保存数据,我的代码是:
$x=new X();
$is_insert= $x->save(['name'=>'test','type'=>'ss']);
if($is_insert)
$inserted_id=$x->getInsertID()
我正在为我的数据库使用 mysql 然后我 运行 在我的播种机中
$university = $this->db->table('universities')->insert([
'name' => 'Harvard University'
]);
$faculty = $this->db->table('faculties')->insert([
'name' => 'Arts & Sciences',
'university' => $university->resultID
]);
查看代码第 6 行
$university->resultID
变量$university
这里是CodeIgniter\Database\MySQLi\Result
的类型对象class
如果我错了或有任何改进的余地,请纠正我
其实你做的是对的。 您按照 Codeigniter 4 模型使用指南以最好和最简单的方式做到了。
您刚刚错过了:$id = $userModel->insertID;
使用您的示例完成代码:
$data = [
'username' => 'darth',
'email' => 'd.vader@theempire.com'
];
$userModel->save($data);
$id = $userModel->insertID;
就是这样。如果您使用的是 codeigniter 的模型,则不需要上述示例中的所有代码,也不需要调用数据库服务或数据库构建器。
于 2021 年 3 月 19 日在 CodeIgniter 4.1.1 上测试