2016-06-28 15 views
1

Betrachten Sie die folgenden zwei Beziehungen:Sparmodell mit nicht nullable Beziehung

Benutzer:

CREATE TABLE user (
id INT NOT NULL, 
social_provider_id INT NOT NULL, 
CONSTRAINT `user_social_provider_id_fk` FOREIGN KEY (`social_provider_id`) 
REFERENCES `social_provider` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, 
) 

Social Anbieter:

CREATE TABLE social_provider (
id INT NOT NULL, 
name VARCHAR NOT NULL) 

Eloquent Modelle:

class User extends Model{ 
    protected $table = 'user'; 
    public function socialProvider(){ 
     return $this->hasOne('/SocialProvider'); 
    } 
} 

I Now möchte ein neues US erstellen er Objekt und speichern Sie es:

$user = new User(); 
$socialProvider = SocialProvider::find(1); 
$user->socialProvider()->save($socialProvider); 
$user->save(); 

Aber ich bekomme diese Ausnahme auf der Linie, wo ich das SocialProvder Objekt zuweisen

Call to undefined method Illuminate\Database\Query\Builder::save() 

Ich versuchte zunächst, das User-Objekt zu speichern und dann die Beziehung zuweisen, aber offensichtlich Dies ist wegen der Einschränkung NOT NULL in der Definition der Tabelle user nicht möglich.

im Moment Meine Abhilfe ist, die Beziehung auf diese Weise zu vergeben:

$user->social_provider_id = $socialProvider->id; 

Aber ich möchte Eloquent-Funktionen nutzen. Wie kann ich ein neues Modell mit einer nicht nullbaren Beziehung speichern, ohne selbst IDs zuweisen zu müssen?

Lösung: Wie @Panagiotis Koursaris vorgeschlagen, ist die Lösung associate() statt save()

Antwort

0

zu verwenden Versuchen Sie folgendes:

$user = new User(); 
$socialProvider = SocialProvider::find(1); 
$user->socialProvider()->associate($socialProvider); 
$user->save(); 
0

In User Modell, tun dies

public function socialProvider(){ 
    return $this->hasOne('App/SocialProvider'); 
}