2016-08-08 7 views
2

Я использую регистрацию пользователей Laravel 5.1 по умолчанию. У меня есть две таблицы: пользователи и магазины. Когда пользователь регистрируется, приложение должно вставить пользователя в пользователей таблицы, получить идентификатор и использовать его для регистрации магазина. Я читал файл AuthController.php по умолчанию, но ничего не нашел. Вот это AuthController, если это помогает.Вставить в две таблицы при регистрации пользователей в Laravel

<?php 

namespace App\Http\Controllers\Auth; 

use App\User; 
use Validator; 
use App\Http\Controllers\Controller; 
use Illuminate\Foundation\Auth\ThrottlesLogins; 
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers; 

class AuthController extends Controller 
{ 
    /* 
    |-------------------------------------------------------------------------- 
    | Registration & Login Controller 
    |-------------------------------------------------------------------------- 
    | 
    | This controller handles the registration of new users, as well as the 
    | authentication of existing users. By default, this controller uses 
    | a simple trait to add these behaviors. Why don't you explore it? 
    | 
    */ 

    use AuthenticatesAndRegistersUsers, ThrottlesLogins; 

    /** 
    * Create a new authentication controller instance. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     $this->middleware('guest', ['except' => 'getLogout']); 
    } 

    /** 
    * Get a validator for an incoming registration request. 
    * 
    * @param array $data 
    * @return \Illuminate\Contracts\Validation\Validator 
    */ 
    protected function validator(array $data) 
    { 
     return Validator::make($data, [ 
      //'name' => 'required|max:255', 
      'email' => 'required|email|max:255|unique:users', 
      'password' => 'required|confirmed|min:6', 
     ]); 
    } 

    /** 
    * Create a new user instance after a valid registration. 
    * 
    * @param array $data 
    * @return User 
    */ 
    protected function create(array $data) 
    { 
     return User::create([ 
      //'name' => $data['name'], 
      'email' => $data['email'], 
      'password' => bcrypt($data['password']), 
     ]); 
    } 

    /** 
    * Get the path to the login route. 
    * 
    * @return string 
    */ 
    public function loginPath() 
    { 
     return route('login'); 
    } 

    /** 
    * Get the post register/login redirect path. 
    * 
    * @return string 
    */ 
    public function redirectPath() 
    { 
     return route('home'); 
    } 
} 

Решено, но теперь у меня есть нарушение ограничения целостности. Правильно ли этот код?

protected function create(array $data) 
    { 
     $user = new User([ 
      'email' => $data['email'], 
      'password' => bcrypt($data['password']) 
     ]); 

    $user->role = 'shop_owner'; 
    $user->remember_token = str_random(10); 

    $user->save(); 

    $userId = $user->id; 

    Shop::create([ 
     'name' => $data['s_name'], 
     'address' => $data['s_address'], 
     'CP' => $data['s_pcode'], 
     'Telephone' => $data['s_tlf'], 
     'contact_name' => $data['cp_name'], 
     'contact_num' => $data['cp_tlf'], 
     'id_user' => $userId 
    ]); 

    return $user; 
} 

ответ

2

Там вы идете:

protected function create(array $data) 
     { 
      $user = User::create([ 
       //'name' => $data['name'], 
       'email' => $data['email'], 
       'password' => bcrypt($data['password']), 
      ]); 

      $userId = $user->id; 
      Shop::create([... use $userId here ...]); 
      return $user; 
     } 
+0

Должен ли я изменить функцию валидатор? –

+0

Не понимаю, почему, если вы не собираетесь передавать больше параметров. – Tom

+0

Теперь у меня есть нарушение ограничений целостности, я отредактировал вопрос, правильно ли этот код? –

0

Это идет к контроллеру:

public function store(Request $request) { 
    $user = User::create(Input::all()); 
    $user->save(); 

    $shop = Shop::create([..enter shop attributes or leave blank..]); 
    $user->shop()->save($shop); 
} 
+0

Это контроллер по умолчанию, и у меня нет метода хранения, кроме того, эта система работает (только хранение данных в одной таблице) –

Смежные вопросы