2016-07-07 1 views
1

Ich denke, wie kann ich eine benutzerdefinierte Liste in meiner Tabelle speichern Benutzer? Wenn der Benutzer die erste Option auswählt, werden die Werte in meine role_id mit einem Wert von 1 usw. eingefügt.Wie speichert man die ausgewählte Liste in Laravel mit One to Many Relationship?

<div class = "form-group {{ $errors->has('role') ? ' has-error' : '' }}"> 

<label for = "role" class = "control-label">Role</label> 

<select class = "form-control" name = "role"> 

    <option selected disabled>Please select role</option> 
    <option value = "role1">Supplies Officer</option> 
    <option value = "role2">Admin Officer</option> 
    <option value = "role3">Attorney</option> 
    <option value = "role4">Chairman</option> 

</select> 

@if ($errors->has('role')) 
    <span class = "help-block">{{ $errors->first('role') }}</span> 
@endif 

Beispiel-SQL:

INSERT INTO `users`(`role_id`, `email`, `username`) VALUES (1,'[email protected]','francis') 

Ich habe eine Tabelle Rollen hat eine Eins-zu-Beziehung mit Benutzer Tisch.

enter image description here

Rollen Tabelle: Ich habe bereits eine Werte hier eingefügt.

roles Table

Benutzer (Modell)

class User extends Model implements AuthenticatableContract 
{ 
use Authenticatable; 

protected $table = 'users'; 

protected $fillable = [ 
    'username', 
    'email', 
    'password', 
    'role_id', 
]; 

public function role() 
{ 
    return $this->belongsTo('Role'); 
} 
} 

Rolle (Modell):

class Role extends Model 
{ 
protected $table = 'roles'; 

public function user() 
{ 
    return $this->hasMany('User'); 
} 
} 

Controller:

ich hier eine Idee haben, immer noch nicht, wie kann ich Fügen Sie die ausgewählte Liste ein oder speichern Sie sie. Jede Hilfe würde geschätzt werden!

public function postRegister(Request $request) 
{ 
    $this->validate($request, [ 
          //This will be unique in users table 
     'email' => 'required|unique:users|email|max:255', 
     'username' => 'required|unique:users|alpha|max:20', 
     'password' => 'required|min:6', 
     'role' => 'required', 
    ]); 

    $email = $request['email']; 
    $username = $request['username']; 
    $password = bcrypt($request['password']); 
    $role = $request['role']; 

    $user = new User(); 
    $user->email = $email; //Accessing properties of Model 
    $user->username = $username; 
    $user->password = $password; 


    $user->save(); 

} 
+0

Warum funktioniert '$ user-> role_id = $ role' nicht für Sie? Ich denke, du überdenkst die Beziehung. – Devon

+0

@Devon Ich habe das versucht, aber es sagt. Integritätseinschränkungsverletzung: 1452 Eine untergeordnete Zeile kann nicht hinzugefügt oder aktualisiert werden: Eine Fremdschlüsseleinschränkung schlägt fehl ('onlinesystem'.users', CONSTRAINT' users_role_id_foreign'. FREMDSCHLÜSSEL ('role_id') REFERENZEN' roles' ('id') – Francisunoxx

+1

Weil Ihre form value ist 'role1' nicht' 1' .. Entweder entkleiden Sie die Zeichen oder ändern Sie die Werte – Devon

Antwort

0

Sie haben Ihre Rolle_ID an das Benutzerobjekt übergeben.

$user->role_id = 1; 
$user->save(); 

Jetzt ist Ihre Rolle Ihrem Benutzer zugewiesen. Sie können Ihre SQL-Datenbank überprüfen oder eine dd() für die $ user-Variable erstellen.

dd($user); 

Sie können es mit eloquent zuweisen, was ein besserer Ansatz ist.

$role = \Role::findOrFail($request['role_id']); 
$role->user()->assign($user)->push(); // This ligne assign the id of the Role Model into the User Model automaticly. 

In diesem Fall muss das Rollenmodell eine answerTo-Beziehung im Benutzermodell haben.