8

我正在使用 Codeigniter 4。

并像这样插入新数据,

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

$userModel->save($data);

这里提到:CodeIgniter's Model reference

它正在插入。但我还没有找到任何关于在插入后获取插入 id 的参考。

请帮忙!提前致谢。

4

9 回答 9

13

这也有效。

       $user= new UserModel();

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

        $user->insert($data);
        $user_id = $user->getInsertID();
于 2020-10-18T13:06:56.247 回答
6

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

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

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

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

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

于 2020-04-11T09:32:49.820 回答
4

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();
于 2020-07-02T06:02:41.107 回答
1

事实上,你所做的是正确的。您以最好和最简单的方式完成了它,并遵循了 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 上测试

于 2021-03-20T00:36:16.237 回答
0

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

 $x=new X();
 $is_insert= $x->save(['name'=>'test','type'=>'ss']);
 if($is_insert)
     $inserted_id=$x->getInsertID()
于 2020-11-04T10:48:23.307 回答
0

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

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

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

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

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

于 2020-06-20T02:14:46.257 回答
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';
}

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

于 2020-07-09T20:00:04.957 回答
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

这里的变量$university是类的类型CodeIgniter\Database\MySQLi\Result对象

如果我错了或有任何改进的余地,请纠正我

于 2021-01-21T05:08:30.590 回答
-1

我遇到了同样的问题,但不幸的是,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);
于 2020-06-19T00:05:56.257 回答