2016-08-08 30 views
2

Ich benutze die standardmäßige Laravel 5.1-Benutzerregistrierung. Ich habe zwei Tische: Benutzer und Geschäfte. Wenn sich der Benutzer anmeldet, sollte die App einen Benutzer in die Tabellenbenutzer einfügen, die ID abrufen und sie verwenden, um einen Shop zu registrieren. Ich habe die Standard-AuthController.php gelesen, aber ich habe nichts gefunden. Hier ist der AuthController, wenn es hilft.Bei der Registrierung von Benutzern in Laravel in zwei Tabellen einfügen

<?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'); 
    } 
} 

gelöst, aber jetzt habe ich eine Verletzung Einschränkung Integrität. Ist dieser Code korrekt?

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; 
} 

Antwort

2

Dort gehen Sie:

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

Soll ich Validator Funktion bearbeiten? –

+0

Sehen Sie nicht warum, außer Sie werden mehr Parameter übergeben. – Tom

+0

Jetzt habe ich eine Verletzung der Integritätsbedingung, ich habe die Frage bearbeitet, ist dieser Code korrekt? –

0

Dies geht zu Ihrem Controller:

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

Dies ist der Standard-Controller und ich habe keine Speichermethode, außer dass dieses System funktioniert (nur Daten in einer Tabelle speichern) –