保存具有不可空关系的模型
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');
}
考虑以下两个关系:
用户:
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');
}