编码器 4:"there is no data to update"异常



我正在尝试理解Codeingiter与实体的工作

这是我的代码从interoncontroller .php:

$intervention = $this->interventionsModel->find($id);
$intervention->title    = $this->request->getVar("title");
$this->interventionsModel->save($intervention);

→如果我改变表单的标题如果我点击&;update&;按钮:it works well (database get updates)

→当我不更改标题时,我只需点击&;update&;按钮:它抛出一个异常:"没有数据要更新。">

如果用户没有更改数据,我如何使用codeingiter 4而不获得异常?

感谢

我现在面临同样的问题。在我的情况下,问题是我没有包括我正在更新的字段,在我的模型的$allowedFields数组。

看看这个:https://codeigniter4.github.io/userguide/models/model.html#configuring-your-model

的例子:

<?php
namespace AppModels;
use CodeIgniterModel;
class UserModel extends Model
{
protected $table      = 'users';
protected $primaryKey = 'user_id';
protected $allowedFields = ['name', 'email', 'is_email_verified'];
}

Save是用于更新/插入的包装器。当你知道你正在更新一条记录时,你可以使用update函数,传入变量,更新将保存,不管记录的属性是否已经改变。

$intervention = $this->interventionsModel->find($id);
$intervention->title    = $this->request->getVar("title");
$this->interventionsModel->update($id, [
"title" => $intervention->title
]);

我认为应该有一个模型的属性来关闭save()包装器的这个功能,但它似乎没有。

文档:https://codeigniter.com/user_guide/models/model.html?highlight=data%20update保存数据

您可以检查表单的值是否为空,并使用if条件

$intervention = $this->interventionsModel->find($id);
if($this->request->getVar("title"))
{
$intervention->title    = $this->request->getVar("title");
$this->interventionsModel->save($intervention);
} else {
// title is empty or null;
}

检查您的protected $allowedFields = ['firstName','lastName','email','mobileNumber','Password','isActive'];像我的一样,我允许ci更改这些字段data

试试这个:

$this->obj->update($id, $p);

代替:

$this->obj->where('id',$id)->update( $p);

相关内容

最新更新