我有几个带有时间戳和active
字段的模型,并且在代码中有几个部分用于更新它们。
我希望能够更新模型,并且仅在更新的模型的变化超过活动字段时才触摸时间戳。
所以我的代码是
const leaveUntouched=["active"=>true]
...
$instance = $model::find($data["id"]);
$changed = array_diff_assoc($data,$instance->toArray());
$needTimestampTouch = array_diff_key($changed,self::leaveUntouched);
if (empty($needTimestampTouch))
$instance->timestamps = false;
$instance->fill($data);
$instance->save();
如果我可以在BaseModel本身中定义它,它将更加简洁。 我应该在我的基类中扩展Eloquent / Model的Fill方法吗?那我该怎么办?
答案 0 :(得分:0)
供参考:
我将其放在我的基类中并且有效:
protected $preventTouch=['active'];
public function save(array $options = [])
{
$needsUpdate=array_diff(
array_keys($this->getDirty()),
$this->preventTouch
);
$this->timestamps = count($needsUpdate) > 0;
parent::save($options);
}