使用touch()更新laravel中自定义时间戳字段的时间戳

时间:2014-12-22 06:19:46

标签: php laravel-4 orm eloquent

有没有办法使用touch()来更新表格中is_online字段的时间戳,而不是更新 laravel created_at中的Eloquent ORM字段< / p>

目前我正在使用

User::where('id',$senderId )->update(array('is_online' => date('Y-m-d H:i:s')));

3 个答案:

答案 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();

继续触摸