2015-01-27 42 views
4

我每次执行以下操作:如何在每次保存时将NOW()保存到我的Laravel Eloquent模型中的相同字段?

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

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

作为奖励:我该怎么做这样的事情$user->modified = "NOW()"? (这显然是错误的,但我希望说明了这一点)

+1

我想你可以'选择NOW()'并分配它。 – Marty 2015-01-27 01:35:14

+1

是的,但这是一个额外的查询 – prograhammer 2015-01-27 01:37:18

+2

是的,这是一个额外的查询。如果时区等设置与MySQL安装相同,则可以使用PHP的'time()'。 – Marty 2015-01-27 01:39:23

回答

9

您可以在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(); 
    } 

} 
+1

Hooray!还解决了我想将会话用户添加到“modified_by”字段的问题! '$ user-> modified_by = Auth :: user() - > id;' – prograhammer 2015-01-27 01:59:30

+0

@DavidGraham这个回答是否与你的评论冲突:'但是这个问题可以进一步提供一个解决方案,以便我们如何获得非参数化/非引用值(如NOW)到查询中(不使用db :: raw调用)'? – Marty 2015-01-27 02:02:49

+0

*可* *(查看奖金) – prograhammer 2015-01-27 02:03:28

相关问题