laravel saveupdate 方法不更新updated_at 解析
场景:
小型论坛,在帖子的表中维持一个最后一个更新的用户
如果上次评论的用户的和现在这个评论的用户是同一个人 则不会更新updated_at 字段
解决:
先说怎么解决
$last_user_id = $event->comment->user_id;
$discussion_id = $event->comment->discussion_id;
$updated_at = date("Y-m-d H:i:s");
Discuss::where(["id" => $discussion_id])->update(compact("last_user_id","updated_at"));解析:
IlluminateDatabaseEloquentModel #527行
update函数内部调用了save save 调用了performUpdate
/**
* Perform a model update operation.
*
* @param IlluminateDatabaseEloquentBuilder $query
* @return bool
*/
protected function performUpdate(Builder $query)
{
// If the updating event returns false, we will cancel the update operation so
// developers can hook Validation systems into their models and cancel this
// operation if the model does not pass validation. Otherwise, we update.
if ($this->fireModelEvent("updating") === false) {
return false;
}
// First we need to create a fresh query instance and touch the creation and
// update timestamp on the model which are maintained by us for developer
// convenience. Then we will just continue saving the model instances.
if ($this->usesTimestamps()) {
$this->updateTimestamps();
}
// Once we have run the update operation, we will fire the "updated" event for
// this model instance. This will allow developers to hook into these after
// models are updated, giving them a chance to do any special processing.
$dirty = $this->getDirty();
if (count($dirty) > 0) {
$this->setKeysForSaveQuery($query)->update($dirty);
$this->fireModelEvent("updated", false);
$this->syncChanges();
}
return true;
}/**
* Update the creation and update timestamps.
*
* @return void
*/
protected function updateTimestamps()
{
$time = $this->freshTimestamp();
if (! is_null(static::UPDATED_AT) && ! $this->isDirty(static::UPDATED_AT)) {
$this->setUpdatedAt($time);
}
if (! $this->exists && ! $this->isDirty(static::CREATED_AT)) {
$this->setCreatedAt($time);
}
}/**
* Determine if the model or given attribute(s) have been modified.
*
* @param array|string|null $attributes
* @return bool
*/
public function isDirty($attributes = null)
{
return $this->hasChanges(
$this->getDirty(), is_array($attributes) ? $attributes : func_get_args()
);
}声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: php 返回一个数组中特定值的所有下标
- 下一篇: nginx 学习之检查配置文件是不是出错
