2016-07-01 13 views
0

Ich möchte wissen, ob es möglich ist, die Constraint-Verletzung beim Erstellen eines Benutzers zu überspringen oder zu ignorieren. Ich habe ein Benutzermodell mit einem Fremdschlüssel address_id.Laravel Überspringen der Constraint-Verletzung beim ersten Erstellen des Modells

Schema::table('user', function($table) { 
    $table->foreign('address_id')->references('address_id')->on('address')->onDelete('cascade'); 
}); 

Nach Erstellen eines Benutzers ich möchte ohne Adresse eines Benutzers erstellen noch die später hinzugefügt werden.

return User::create([ 
    'first_name' => $data['firstname'], 
    'last_name' => $data['lastname'], 
    'email' => $data['email'], 
    'password' => bcrypt($data['password']), 
]); 

aber daher die Einschränkung der Beschränkung. Es ist möglich, dies zu tun?

EDIT:

So würde Ich mag die Beschränkungen halten, aber das obige Beispiel läuft in eine Einschränkungsverletzung so was der beste Weg, dies zu umgehen ist? Einen Dummy-Adresseintrag erstellen?

Antwort

1

Sie können die DB für die Zeit ändern Sie das Modell hinzufügen:

protected function turnOffDatabaseChecks() 
{ 
    DB::statement('SET FOREIGN_KEY_CHECKS=0;'); 
    Eloquent::unguard(); 
} 

protected function turnOnDatabaseChecks() 
{ 
    DB::statement("SET sql_mode = 'STRICT_ALL_TABLES';"); 
    Eloquent::reguard(); 
} 

dann in Ihrem Benutzermodell:

$this->turnOffDatabaseChecks(); 

$user = User::create([ 
    'first_name' => $data['firstname'], 
    'last_name' => $data['lastname'], 
    'email' => $data['email'], 
    'password' => bcrypt($data['password']), 
]); 

$this->turnOnDatabaseChecks(); 

return $user; 

Allerdings würde ich sehr vorsichtig sein, dies bei der Verwendung und würde sich fragen, warum Sie eine Fremdschlüsseleinschränkung haben, die Sie ignorieren möchten.

+0

Danke, ich möchte nicht ignorieren, wie du gesagt hast, aber ich weiß nicht, wie man es umgeht. Es ist ein Registrierungsformular mit nur diesen Feldern: Vorname, Nachname, E-Mail und Passwort. Ich möchte, dass die Beschränkungen halten, aber nicht, wie in diesem Beispiel, schlimmsten Fall würde es überspringen wie Ihr Beispiel. – Jacob

+1

Wenn ein Benutzer keine Adresse haben muss, warum ist es eine Einschränkung? –

+0

@chaseenyc, ich bin ein wenig neu, Sie haben wahrscheinlich Recht, ich dachte, es wäre eine gute Praxis, um die Datenbank eng zu halten. Das ist einfach nicht möglich, weil dafür Einschränkungen gemacht werden. – Jacob