Рассмотрим следующие два соотношения: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()