在CodeIgniter 4中保存到数据库后如何获取插入ID

时间:2020-04-10 16:19:20

标签: php mysql codeigniter-4

我正在使用Codeigniter4。

并像这样插入新数据,

$data = [
        'username' => 'darth',
        'email'    => 'd.vader@theempire.com'
];

$userModel->save($data);

此处提到了哪些地方:CodeIgniter’s Model reference

正在插入。 但是我没有找到任何有关插入后获取插入ID的参考。

请帮助!提前致谢。

9 个答案:

答案 0 :(得分:3)

有三种方法可以在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();

答案 1 :(得分:3)

这也可以。

       $user= new UserModel();

        $data = [
                 'username' => 'darth',
                  'email'    => 'd.vader@theempire.com'
              ];

        $user->insert($data);
        $user_id = $user->getInsertID();

答案 2 :(得分:2)

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

$db = db_connect('default'); 
$builder = $db->table('myTable');

$data = [
        'username' => 'darth',
        'email'    => 'd.vader@theempire.com'
];

$builder->insert($data);
echo $db->insertID();

希望他们很快会在文档上添加清晰的说明。

答案 3 :(得分:0)

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

$response = $this->insert($data, false);

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

现在,在您的模型中,您只需引用“ $ this-> primaryKey”,它将在保持数据建模功能的同时为您提供所需的信息。

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

答案 4 :(得分:0)

对于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);将返回单行。它将找到提供的值作为$ primaryKey。

答案 5 :(得分:0)

在我的情况下,嗨,我使用ci模型保存数据,我的代码是:

# will return the members of the drives (Root, MaximumSize, ...)
$psdrive | Get-Member

# will return the members of the array that contains the drives (Add, Count, ...)
Get-Member -InputObject $psdrive

答案 6 :(得分:0)

我在我的数据库中使用 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

这里的变量 $universityCodeIgniter\Database\MySQLi\Result 类的类型对象

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

答案 7 :(得分:0)

事实上,你所做的是正确的。 您按照 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 上测试

答案 8 :(得分:-1)

我遇到了同样的问题,但是不幸的是,CI4文档并没有太大帮助。使用构建器的解决方案可以正常工作,但这是解决数据建模的一种方法。我相信您需要一个纯粹的模型解决方案,否则您将不会提出疑问。

$data = [
        'username' => 'darth',
        'email'    => 'd.vader@theempire.com'
];

$id = $userModel->save($data);

尽我所能,我决定存储save方法的结果,以查看是否返回了布尔值以指示保存是否成功。检查变量后,我意识到它会返回我想要的结果:丢失的insertID。

我相信CodeIgniter 4是一个简单易用的框架,可以在共享主机中发挥出色的作用,如果您正在学习,其他框架可能会要求很高,但是缺少相同的出色文档和CI3示例。希望这只是暂时的。

顺便说一句,仅当您在模型本身之外(例如,从Controller)使用$ userModel时,您的代码才有效。您需要创建一个像这样的模型对象:

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

或者,如果您正在模型本身内部编程方法(我最喜欢的方式),则应该编写

$this->save($data);