保存具有不可空关系的模型

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 )

Eloquent 型号:

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

我试图先保存用户对象,然后分配关系,但显然这是不可能的,因为 user table 定义中的 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');
}