最近更新了Laravel,他们需要remember_token和updated_at。
登录和退出时,我得到:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'remember_token' in 'field list' (SQL: update `account` set `remember_token` = s8XPDCdNdJnjbLj7MlDRO1Cy5owwjxdfW1rYVhd6QpePIltqPkavr9l3KUbd, `updated_at` = 2014-07-30 14:09:37 where `id` = 5)
我正在使用外部用户数据库,我不想创建这些额外的字段,因为它也用在我不想搞砸的游戏服务器上。
有没有办法绕过对这两列的需求?
答案 0 :(得分:2)
我很确定使用Laravel内置的Auth系统(Guard)可以让你使用UserInterface,而后者又可以让你定义这些。但是,您可以通过使用这些方法伪造它,但让它们返回无用的信息。
<?php
use Illuminate\Auth\UserTrait;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableTrait;
use Illuminate\Auth\Reminders\RemindableInterface;
class User extends Eloquent implements UserInterface, RemindableInterface
{
use UserTrait, RemindableTrait;
protected $hidden = array('password', 'remember_token');
public $timestamps = false;
public function getRememberToken()
{
return '';
}
public function setRememberToken($value)
{
}
public function getRememberTokenName()
{
// just anything that's not actually on the model
return 'trash_attribute';
}
/**
* Fake attribute setter so that Guard doesn't complain about
* a property not existing that it tries to set.
*
* Does nothing, obviously.
*/
public function setTrashAttributeAttribute($value)
{
}
}
这可能只是做你想要的 - 基本上覆盖这些功能不能正常工作,这意味着1)你不需要弄乱你的数据库和2)当功能不起作用时它没关系,因为你'反正还没有使用它。
正如@neeraj所说,对created_at
事,只做$timestamps = false
并希望最好。更新了上面的模型以反映这一点。
答案 1 :(得分:2)
是的,这是可能的。此代码应该允许您避免使用&#39; remember_token&#39;在您的用户表中
public function getRememberToken()
{
return null; // will not support
}
/**
* Set the token value for the "remember me" session.
*
* @param string $value
* @return void
*/
public function setRememberToken($value)
{
// will not support
}
/**
* Get the column name for the "remember me" token.
*
* @return string
*/
public function getRememberTokenName()
{
return null; // will not support
}
public function setAttribute($key, $value)
{
$isRememberTokenAttribute = $key == $this->getRememberTokenName();
if( ! $isRememberTokenAttribute )
{
parent::setAttribute($key, $value);
}
}
答案 2 :(得分:1)
尝试从模式中删除以下界面
RemindableInterface
对于created_at和updated_at,您可以在模态中编写以下行:
public $timestamps = false;
例如,如果你的模态名称是Admin,那么代码应该是
class Admin extends Eloquent implements UserInterface
{
public $timestamps = false;
}