В моей базе данных у меня есть две таблицы, People
& Auth
. В таблице Auth хранятся данные аутентификации и person_id, в то время как таблица People содержит всю другую информацию (имя, адрес и т. Д.). Между таблицами существует взаимно однозначная взаимосвязь, как показано на приведенных ниже моделях.Laravel 5 - создание двух таблиц при регистрации
Причина я отделил данные на две таблицы, потому что в моем приложения, у меня будет много людей, которые не имеют возможности аутентификации (заказчиков к пользователю).
App/auth.php
class Auth extends Model implements AuthenticatableContract, AuthorizableContract, CanResetPasswordContract
{
use Authenticatable, Authorizable, CanResetPassword;
public function person() {
$this->belongsTo('Person');
}
}
App/Person.php
class Person extends Model
{
public function auth() {
$this->hasOne('Auth');
}
}
В моей AuthController :: создать метод(), я пытаюсь заполнить и модели с предоставленной пользователем информацией:
protected function create(Request $request)
{
$person = \App\Person::create($request->all());
$auth = new \App\Auth;
$auth->fill($request->all());
$auth->person_id = $person->id;
$auth->save();
return $person;
}
В моем приложении я хотел бы авторизовать пользователя и передать объект $ user в качестве аутентифицированного лица для последующих маршрутов. Правильно ли я делаю это? Это лучший способ? Есть куки и бонусные баллы, если вы также можете объяснить, как получить объект $ user после аутентификации ... Данные таблицы Auth не нужны в объекте $ user.
EDIT
Я изменил мой config/Auth.php
файл, чтобы отразить изменения, как указано в ответах ниже (спасибо @ user3702268). Однако теперь я обнаружил ошибку с моим контроллером. В методе AuthController :: create() я возвращаю свой объект App/Person, и это вызывает ErrorException
, видя, как App/Person не реализует свойство Authorizable. Я не хочу, чтобы мой объект App/Person был авторизуемым, но это объект, который я хочу вернуть как аутентифицированный $ user в своих представлениях. Как? Должен ли я просто переопределить метод postRegister
или есть ли более способ Laravel?
EDIT 2
Я теперь возвращая объект $ аутентификации, который использует authorizable черту. В моих взглядах/контроллерах Я пытаюсь получить доступ к лицу, использующий Auth::user()->person
но получает Class 'Person' not found
ошибки
Я заметил в 'конфигурации/Auth.php', что я должен также изменить' «стол» => 'auth'', поскольку мое имя таблицы также отличается. Таблицы заполняются правильно, и я возвращаю объект Person! +1 Поскольку я изменил свой стол на auth, а моя модель на Auth ... вызовет конфликты с фасадом Auth? –
Нет, ваш класс Auth должен находиться в другом пространстве имен, по умолчанию он помещается в пространство имен App \ Auth. Если вы хотите использовать оба класса, вы должны использовать Alias one или Both, например. use App \ Auth as AuthModel use Auth <---- Auth facade – leyduana
Вы должны вернуть свой класс Auth, и вы можете получить доступ к классу Person в своих представлениях, используя соотношение: Auth :: user() -> person – leyduana