我正在尝试理解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);