2016-06-28 2 views
1

Рассмотрим следующие два соотношения:Saving модель не обнуляемого отношения

Пользователь:

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, 
) 

Социальный провайдер:

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

Красноречивые модели:

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

Теперь я хочу создать нового пользователя эр объект и сохранить его:

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

Но я получаю это исключение на линии, где я назначьте объект SocialProvder

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

Я пытался сохранить объект пользователя, а затем назначить отношения, но, очевидно, это невозможно из-за ограничения NOT NULL в определении таблицы user.

Мой обходной путь на данный момент, чтобы назначить отношения таким образом:

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

Но я хотел бы использовать функции красноречив в. Как сохранить новую модель с отношением, не равным нулю, без необходимости присваивать идентификаторы самостоятельно?

Решение: Как @Panagiotis Koursaris предложил, решение использовать associate() вместо save()

ответ

0

Попробуйте это:

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

В User модели, сделать это

public function socialProvider(){ 
    return $this->hasOne('App/SocialProvider'); 
} 
Смежные вопросы