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()更新了这个,但找不到与此相关的任何文件。
答案 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;
}