Чтобы изменить таблицу, вы можете сделать это на своей модели.
protected $table = 'q_users';
Чтобы изменить первичный ключ, вы можете сделать это: protected $ primaryKey = 'qID';
Чтобы изменить другие поля, такие как email
, name
, password
, вы можете написать миграцию для переименования столбцов в таблице users
.Это будет выглядеть следующим образом:
Schema::table('users', function (Blueprint $table) {
$table->renameColumn('name', 'qName');
$table->renameColumn('email', 'qEmail');
$table->renameColumn('password', 'qPassword');
});
Прежде чем вы сможете это сделать, убедитесь, что у вас установлен пакет doctrine/dbal
.Вы можете установить его, выполнив следующие действия:
composer require doctrine/dbal
Изменение поля email
и password
может иметь много последствий в системе аутентификации Laravel и системе уведомлений.Вам нужно сделать пару изменений.
В вашем App\Http\Controllers\Auth\LoginController
вам нужно добавить следующий метод, который переопределит тот, который входит в черту AuthenticateUsers
.
/**
* Get the login username to be used by the controller.
*
* @return string
*/
public function username()
{
return 'qEmail';
}
Вам также необходимо добавить следующий метод:
/**
* Get the password for the user.
*
* @return string
*/
public function getAuthPassword()
{
return $this->qPassword;
}
... и это должно обеспечить успешную работу входа в систему с вашими новыми полями.
Изменение электронной почты также может нарушить рабочий процесс сброса пароля электронной почты.Вам необходимо переопределить следующий метод в вашей модели пользователя.
/**
* Get the e-mail address where password reset links are sent.
*
* @return string
*/
public function getEmailForPasswordReset()
{
return $this->qEmail;
}
Я не совсем уверен, как вы можете переопределить рабочий процесс проверки, но похоже, что вам нужно будет внести изменения здесь:
/**
* Determine if the user has verified their email address.
*
* @return bool
*/
public function hasVerifiedEmail()
{
return ! is_null($this->qEmailVerifiedAt);
}
/**
* Mark the given user's email as verified.
*
* @return bool
*/
public function markEmailAsVerified()
{
return $this->forceFill([
'qEmailVerifiedAt' => $this->freshTimestamp(),
])->save();
}
/**
* Send the email verification notification.
*
* @return void
*/
public function sendEmailVerificationNotification()
{
// You probably need to override with your own notification here
// which would pull your actual email
$this->notify(new Notifications\VerifyEmail);
}
В общем, этотрудное решение.Я не уверен, почему вы хотите это сделать.Однако, так как вы хотите это сделать, есть более простой (хотя все еще не рекомендуемый способ), чтобы гарантировать, что все хорошо работает с вашими новыми полями.
Вы можете определить Accessors к вашим измененным полям.Например, вы можете добавить следующие методы доступа в вашу модель User.
public function getNameAttribute($value)
{
return $this->qName;
}
public function getEmailAttribute($value)
{
return $this->qEmail;
}
public function getEmailVerifiedAtAttributes($value)
{
return $this->qEmailVerifiedAt;
}
... и это должно заставить его работать.Любые вызовы на $user->email
фактически вытягивают значение из $user->qEmail
.Хотя, как я уже сказал, я бы лично не рекомендовал это.
Редактировать: На основании ваших комментариев, если вы хотите изменить имя поля в форме входа в систему, вам также необходимо изменить логику проверки.Так что в вашем LoginController
вам также необходимо переопределить эти методы.
/**
* Validate the user login request.
*
* @param \Illuminate\Http\Request $request
* @return void
*/
protected function validateLogin(Request $request)
{
$this->validate($request, [
$this->username() => 'required|string',
'qPassword' => 'required|string',
]);
}
/**
* Get the needed authorization credentials from the request.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
protected function credentials(Request $request)
{
return $request->only($this->username(), 'qPassword');
}