Laravel Model Beziehungen mit foreign key-Einschränkungen

Ich versuche, foreign key-Einschränkungen eine Arbeit in Laravel. Aber ich kann nicht scheinen, um meine Modelle nicht mehr.

Meine Datenbank-Struktur setup ist wie folgt (ich habe entfernt unnötigen code):

Schema::create($this->tableName, function(Blueprint $table)
{
    $table->increments('id');

    $table->string('username')->unique();
    $table->string('password', 64);

    $table->integer('address_id')->unsigned();
});

Schema::create($this->tableName, function(Blueprint $table)
{
    $table->increments('id');

    $table->integer('user_id')->unsigned();

    $table->string('name');
    $table->string('surname');

    $table->string('street');
    $table->string('number');
    $table->string('town');
    $table->string('country');
});

Also die Address ist in einer separaten Tabelle und eine Address gehört zu einer User. Die User hat eine Address.

Nächstes habe ich die entsprechenden Modelle:

Class User extends Model
{
    public function address()
    {
        return $this->hasOne('Address');
    }
}

Class Address extends Model
{
    public function user()
    {
        return $this->belongsTo('User');
    }
}

Wenn ich jetzt versuche zum erstellen einer User mit einem Address und speichern Sie es ich bekomme constraint-Fehler. Ich habe versucht, es in beide Richtungen (speichern der User zuerst und speichern die Address erste), aber beide geben einen Fehler aus.

Die erste Idee die ich hatte war dieses:

//Create a new user
$user = new User($data);
$address = new Address($addressData);

$address->user()->associate($user);
$user->push(); //Error here

Aber das gibt den Fehler:

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`eet`.`users`, CONSTRAINT `users_address_id_foreign` FOREIGN KEY (`address_id`) REFERENCES `addresses` (`id`)) (SQL: insert into `users` (`username`, `email`, `password`, `type`, `phone`, `cellphone`, `newsletter_week`, `ip`, `updated_at`, `created_at`) values (adsadsad, validemail@gmail.comx, passWO23dw00, customer, 123123213, 1234567890, 1, ::1, 2014-10-05 19:56:03, 2014-10-05 19:56:03))

So, ich habe versucht, das speichern der Address zuerst, und dann die User wie:

$user = new User($data);

$address = new Address($addressData);
$address->save(); //Error here

$address->user()->associate($user);
$user->push();

Aber dann der folgende Fehler wird generiert:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'user_id' cannot be null (SQL: insert into `addresses` (`name`, `surname`, `street`, `number`, `town`, `country`, `user_id`) values (Foo, Bar, FooStreet, 200, Townsville, nl, ))

Also, was ist ein guter Weg, dies zu tun? Ich konnte das Feld address_id für die User null-Werte zulässt, aber ist das eine gute übung? Ich will eine User immer ein Address.

InformationsquelleAutor Matthijn | 2014-10-05
Schreibe einen Kommentar