我是PHP新手
默认情况下,rails框架中提供了以下脏方法,这里的人
是模型对象,表示人
表中的行。
person.name = 'Bob'
person.changed? # => true
person.name_changed? # => true
person.name_changed?(from: nil, to: "Bob") # => true
person.name_was # => nil
person.name_change # => [nil, "Bob"]
person.name = 'Bill'
person.name_change # => [nil, "Bill"]
我对to
感兴趣
如果你考虑Laravel的框架,你已经拥有了大量的功能。
Laravel雄辩的更新,只要已进行更改
它在模型中保存一个“原始”值数组,如果其中任何一个值被更改,它将把它们提交给数据库。
它们还附带了许多事件,您可以插入其中(之前保存、之后保存、之前创建、之后创建、验证规则等...),并且可以轻松扩展。这可能是我能想象到的你正在寻找的最相容的东西。
然而,这不是codeigniter,它依赖于不同的框架。如果你不是死心塌地的codeigniter你可以考虑切换到一个框架,如Laravel或OctoberCMS根据你的需要。
编辑是因为你被codeigniter困住了
您可能希望使用这样的库:https://github.com/yidas/codeigniter-model
然后很容易通过一些自定义缓存机制进行扩展。
下面的代码可以作为您自己的模型实现的基础。
它有一个非常基本的逻辑基础,但是允许您检查脏状态并回滚对模型所做的任何更改。
请注意,这是非常粗略的,甚至可能包含一些错误,因为我没有运行这个代码。它更多的是一个概念证明,以帮助您创建一个适合您需求的模型。
class User extends CI_Model
{
public $table = 'users';
public $primaryKey = 'id';
public $attributes;
public $original;
public $dirty = [];
public $exists = false;
function __construct()
{
parent::Model();
}
public static function find($model_id)
{
$static = new static;
$query = $static->db->query("SELECT * FROM ' . $static->getTable() . ' WHERE ' . $this->getKeyName() . ' = ?", [$model_id]);
if($result->num_rows()) {
$static->fill($query->row_array());
$static->exists = true;
}
else {
return null;
}
return $static;
}
public function getKeyName()
{
return $this->primaryKey;
}
public function getKey()
{
return $this->getAttribute($this->getKeyName());
}
public function getTable()
{
return $this->table;
}
public function fill($attributes)
{
if(is_null($this->original)) {
$this->original = $attributes;
$this->dirty = $attributes;
}
else {
foreach($attributes as $key => $value) {
if($this->original[$key] != $value) {
$this->dirty[$key] = $value;
}
}
}
$this->attributes = $attributes;
}
public function reset()
{
$this->dirty = [];
$this->attributes = $this->original;
}
public function getAttribute($attribute_name)
{
return array_key_exists($attribute_name, $this->attributes) ? $this->attributes[$attribute_name] : null;
}
public function __get($key)
{
return $this->getAttribute($key);
}
public function __set($key, $value)
{
$this->setAttribute($key, $value);
}
public function setAttribute($key, $value)
{
if(array_key_exists($key, $this->original)) {
if($this->original[$key] !== $value) {
$this->dirty[$key] = $value;
}
}
else {
$this->original[$key] = $value;
$this->dirty[$key] = $value;
}
$this->attributes[$key] = $value;
}
public function getDirty()
{
return $this->dirty;
}
public function isDirty()
{
return (bool)count($this->dirty);
}
public function save()
{
if($this->isDirty()) {
if($this->exists)
{
$this->db->where($this->getKeyName(), $this->getKey());
$this->db->update($this->getTable(), $this->getDirty());
$this->dirty = [];
$this->original = $this->attributes;
}
else
{
$this->db->insert($this->getTable(), $this->getDirty());
$this->dirty = [];
$this->original = $this->attributes;
$this->attributes[$this->getKeyName()] = $this->db->insert_id();
$this->original[$this->getKeyName()] = $this->getKey();
$this->exists = true;
}
}
}
}
if($user = User::find(1)) {
$user->name = "Johnny Bravo";
$user->save();
}
我是WPF技术的新手。我已经在WinForms开发了大约6年。 现在我想通过学习WPF来提高我的技能一大步。我正在阅读MSDN中的介绍指南,同时作为个人练习,我试图将WinForms UI的sructure转换为其WPF UI的等价物。 这是我想在WPF中重现的WinForms控件结构的简单模型: 我的问题:有人可以指导我或给我一个简短的例子,我如何可以添加一个下拉按钮的东西在工具栏?。
我尝试使用以下R语句,并使用NumPy将其转换为Python: 有与which()等价的Python吗?这里,x是矩阵tmp中的行,k对应于另一个矩阵中的列数。 之前,我尝试了以下Python代码,并收到一个值错误(操作数无法与形状一起广播):
在Gatling scala中是否有与以下代码相当的java代码?特别是wsAwait类: 这来自使用依赖关系gatling-http-2.3.1的scala项目示例。我和jar在io包中看到了。加特林。http。检查async特性AsyncCheckSupport扩展了AsyncCheckDSL。但这并没有包含在gatling-http-3.7.3中。jar在我的java测试项目中使用。 在最新
我无法设置任何内容:或其他内容,包括和。是否可以从主机访问名称和?似乎无法设置中的变量...请帮我确定我遗漏了什么,提前谢谢
当按要求指定初始表单字段时,我将它们设置为红色,而css是 我只想在vanilla JavaScript中触及它们时突出显示它们。
我已经习惯了。NET和LINQtoEntities,尤其是IQueryable部分,它允许在获取结果之前通过不同的函数传递请求。 spring数据中是否存在类似的内容?或者其他java ORM?