保存关系不可为空的模型


Saving model with not nullable relationship

考虑以下两个关系:

用户:

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对象并保存它:

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

但是在分配socialprovider对象时出现了这个异常

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

我尝试先保存User对象,然后分配关系,但显然这是不可能的,因为user表定义中的NOT NULL约束。

我现在的解决方法是这样分配关系:

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

但是我想使用Eloquent的功能。我如何保存具有不可为空关系的新模型,而不必自己分配id ?

解决方案:就像@Panagiotis Koursaris建议的那样,解决方案是使用associate()而不是save()

试试这个:

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

User模型中,这样做

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