【问题标题】:How to save NOW() to the same field in my Laravel Eloquent model every time I save?每次保存时如何将 NOW() 保存到我的 Laravel Eloquent 模型中的同一字段?
【发布时间】:2015-03-25 13:18:36
【问题描述】:

每次我执行以下操作时:

$user = new User;
$user->name = 'John';
$user->save();

我希望在 MySQL 中将一个名为“modified”的字段更新为 NOW()。我不能使用 Laravel 的时间戳,因为我只使用了一个修改过的字段。我可以依靠 MySQL 来为我做这件事,但我想知道是否有办法在我的 Laravel 模型中实现这一点?也许在保存之前以某种方式使用突变器来设置它?

作为奖励:我将如何做这样的事情$user->modified = "NOW()"? (这显然是错误的,但希望能证明这一点)

【问题讨论】:

  • 我猜你可以SELECT NOW() 并分配它。
  • 是的,但这是一个额外的查询
  • 是的,这是一个额外的查询。如果时区等设置与 MySQL 安装相同,您可以使用 PHP 的 time()
  • 是的!,@Marty 也想到了这一点,但仍然无法解决我的问题。需要一种方法来将那些 MySQL 常量/函数(如 NOW())插入其中。
  • @Prix 我只使用一列。所以我的模型中有public $timestamps = false;

标签: php laravel laravel-4 eloquent


【解决方案1】:

您可以在 saving 事件中完成此操作,您可以在模型的 boot 方法中为此注册回调:

class User extends Eloquent {

    public static function boot()
    {
        static::saving(function($user)
        {
            $user->modified = DB::raw('NOW()');

            // Alternatively, you can use this:
            $user->modified = Carbon\Carbon::now();
        });

        parent::boot();
    }

}

【讨论】:

  • 万岁!还解决了我想将会话用户添加到modified_by 字段的问题! $user->modified_by = Auth::user()->id;
  • @DavidGraham 这个答案与您的评论不冲突吗:But this question could further provide a solution as to how we can get non-parameterized / non-quoted values (like NOW) into the query (without using a db::raw call)
  • 可以(见有问题的奖金)
  • 但还要注意这里使用db::raw 不是为了运行原始查询
  • 检查过了!有用! $user->modified = DB::raw("NOW()"); 有效。但我确实看到我的评论可能会让@Marty 感到困惑,我指的是完整的原始查询DB::select(DB::raw... 查询
猜你喜欢
  • 2015-09-06
  • 1970-01-01
  • 1970-01-01
  • 2016-04-07
  • 2019-05-30
  • 1970-01-01
  • 1970-01-01
  • 2016-06-22
  • 2011-06-11
相关资源
最近更新 更多