如何在CodeIgniter4中保存到数据库后获得插入id



我正在使用Codeigniter 4。

插入这样的新数据,

$data = [
'username' => 'darth',
'email'    => 'd.vader@theempire.com'
];
$userModel->save($data);

这里提到:CodeIgniter的模型参考

它正在进行插入。但我还没有找到任何关于在插入后获得插入id的引用。

请帮忙!提前谢谢。

这也适用

$user= new UserModel();
$data = [
'username' => 'darth',
'email'    => 'd.vader@theempire.com'
];
$user->insert($data);
$user_id = $user->getInsertID();

在研究了CI4框架的核心之后,我得到了一个简单的解决方案。

$db = db_connect('default'); 
$builder = $db->table('myTable');
$data = [
'username' => 'darth',
'email'    => 'd.vader@theempire.com'
];
$builder->insert($data);
echo $db->insertID();

希望他们能尽快在文档上添加一个清晰的描述。

有三种方法可以在ci4:中获取ID

$db = ConfigDatabase::connect();
$workModel = model('AppModelsWorkModel', true, $db);
$id = $workModel->insert($data);

echo $id;
echo '<br/>';
echo $workModel->insertID(); 
echo '<br/>';
echo $db->insertID();

事实上,您所做的是正确的。您以最好、最简单的方式完成了这项工作,并遵循了Codeigniter 4 Model使用指南。

您刚刚错过:$id = $userModel->insertID;

使用示例完成代码:

$data = [
'username' => 'darth',
'email'    => 'd.vader@theempire.com'
];
$userModel->save($data);
$id = $userModel->insertID;

就是这样。如果您使用的是codeigniter的模型,那么您不需要上面示例中的所有代码,也不需要调用数据库服务或dbbuilder。

2021年3月19日在CodeIgniter 4.1.1上进行测试

为了克服这个问题,我在save((方法--中修改了system/Model.php

$response = $this->insert($data, false);
// add after the insert() call 
$this->primaryKey = $this->db->insertID();

现在,在您的模型中,您只需引用"$this->primaryKey",它就会为您提供所需的信息,同时维护数据建模功能。

我将把这个提交给CI开发人员,希望它能被添加进来。

对于CI4

$settings = new SettingsModel();
$settingsData = $settings->find(1);
<?php namespace AppModels;
use AppModelsBaseModel;
class SettingsModel extends BaseModel
{
protected $table      = 'users';
protected $primaryKey = 'id';
}

$设置->查找(1(;将返回一行。它将找到作为$primaryKey提供的值。

大家好,在我的情况下,我使用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

这里的变量$universityCodeIgniterDatabaseMySQLiResult类的类型对象

如果我错了或有任何改进的空间,请更正

$Record_New_Data = array(
'OWNER_ID' => 'some_id_value',
'NAME' => 'some_name_value',
);

$db = db_connect();
$db->table('MY_TABLE')->insert($Record_New_Data);
if(!$My_newly_inserted_ID = $db->insertID()){
die("There was an error inserting a record.");
}

echo "My insert ID = $My_newly_inserted_ID";

我也遇到了同样的问题,但不幸的是,CI4文档没有多大帮助。使用构建器的解决方案令人惊叹,但它是数据建模的一种变通方法。我相信你想要一个纯模型的解决方案,否则你就不会问了。

$data = [
'username' => 'darth',
'email'    => 'd.vader@theempire.com'
];
$id = $userModel->save($data);

尝试了我能想到的一切,我决定存储save方法的结果,看看是否返回了一个布尔值来指示保存是否成功。通过检查变量,我意识到它返回的正是我想要的:丢失的insertID。

我相信CodeIgniter 4是一个非常简单、功能强大的框架,它在共享主机中做得很好,如果你正在学习,其他框架可能会有点苛刻,但缺乏与CI3相同的出色文档和示例。希望这只是暂时的。

顺便说一句,只有在模型本身之外使用$userModel时,代码才能工作,例如,从控制器中使用。您需要创建一个模型对象,如:

$userModel = New WhateverNameModel();
$data = [any data];
$userModel->save($data);

或者,如果你正在模型内部编程一个方法(我最喜欢的方式(,你应该写

$this->save($data);

最新更新