阻止Laravel更新' updated_at'在用户登录

时间:2014-10-01 19:08:13

标签: php mysql laravel-4

Google搜索似乎没有任何解决方案。在Laravel中使用Auth登录帐户时,它会更新用户的updated_at字段。我希望它不要这样做,并且只在用户详细信息实际更改时更新updated_at。

我怎样才能在Laravel 4中实现这个目标?

UPDATE 我知道它为什么要更新时间戳。这是因为在用户登录时,我更新了一个字段。这显然反过来更新了时间戳。

问题应该是,如何停止更新字段的字段更新?

示例代码:

public function postLogin()
{
    $email = Input::get('email');
    $password = Input::get('password');
    if(Auth::attempt(array('email' => $email, 'password' => $password))){
        $user = User::find(Auth::user() -> id);
        $user -> online = 1;
        $user -> timestamps = false;
        $user -> save();

        return Redirect::intended('/');
    }else{
        return Redirect::route('home') -> with('global', 'Failed to login');
    }
}

public function getLogout(){
    $user = User::find(Auth::user() -> id);
    $user -> online = 0;
    $user -> timestamps = false;
    $user -> save();

    Auth::logout();
    return Redirect::route('home');
}

这是带有建议的更新代码。这仍然在更新' updated_at'。

我怀疑是Auth :: logout()更新了这个,但找不到与此相关的任何文件。

2 个答案:

答案 0 :(得分:6)

在登录方法中设置此项,它将禁用更新时间戳。

$user = User::find(Auth::user() -> id);
$user->online = 1;

// disable the timestamps before saving
$user->timestamps = false;
$user->save();

修改 正如Jarek Tkaczyk指出的那样;用户状态实际上并不属于User模型。它也有一个严重的缺陷,如果用户没有注销但是他的会话到期会怎么样?

您应该使用会话来确定用户是否在线(登录并处于活动状态),如果将会话存储在数据库中,这很容易。 http://laravel.com/docs/4.2/session#database-sessions

答案 1 :(得分:1)

如果您不想在插入和更新记录时更新created_at和updated_at列,请将模型上的$ timestamps属性设置为false。

像这样: -

class User extends Eloquent {

   protected $table = 'users';

   public $timestamps = false;

}