有没有办法使用touch()
来更新表格中is_online
字段的时间戳,而不是更新 laravel created_at
中的Eloquent ORM
字段< / p>
目前我正在使用
User::where('id',$senderId )->update(array('is_online' => date('Y-m-d H:i:s')));
答案 0 :(得分:6)
不,除了内置时间戳之外的其他任何内容都不会编写touch方法,但如果您愿意,可以在用户模型中编写自己的函数。像这样的东西
class User extends Eloquent implements UserInterface, RemindableInterface {
public function touchOnline()
{
$this->is_online = $this->freshTimestamp();
return $this->save();
}
}
然后用
替换旧代码User::find($senderId)->touchOnline();
更多代码行,但可能稍微更具可读性。
如果您感到好奇,可以find the code behind the touch function here。
答案 1 :(得分:0)
Laravel 4.2
class User extends Eloquent implements UserInterface, RemindableInterface
{
public static function boot()
{
parent::boot();
/*
static::creating(function($table) {
$table->foo = 'Bar';
});
*/
static::updating(function($table) {
$table->is_online = $this->freshTimestamp();
// $table->something_else = 'The thing';
});
}
}
<强>用法即可。只需调用原生触摸方法即可。
User::find($senderId)->touch();
答案 2 :(得分:0)
快速替代方法是覆盖模型中的CREATED_AT常量,如
Class User extends Model
{
protected UPDATED_AT = 'is_online';
}
$user->touch();
继续触摸