gpt4 book ai didi

php - 在 Laravel 中保存一对一关系

转载 作者:可可西里 更新时间:2023-10-31 22:06:22 24 4
gpt4 key购买 nike

一个User有一个(或零个)Company,一个Company属于一个且只有一个User。我尝试为用户保存一家公司,但每次我重新触发保存方法时它都会在数据库中添加一个新条目。这是一对一的关系,所以我在 User 上使用了 save 方法。

所以 Company 有一个方法 user():

public function user() {
return $this->belongsTo(User::class, 'user_id');
}

User 有一个方法company():

public function company() {
return $this->hasOne(Company::class, 'user_id');
}

我正在尝试像这样(在 Controller 中)保存(因此创建或更新)用户的公司:

$company = new Company();
$company->name = 'Test';
User::findOrFail(1)->company()->save($company);

我第一次运行此代码时,它会在数据库中创建条目(OK),但第二次它会为同一用户添加一个新条目(Not OK)。我以为它只会更新数据库条目。

这是 Laravel 中的一个故障(或者我在一对一关系中不理解的东西)还是我做错了什么?(我认为并希望这是第二个目的)

最佳答案

创建和更新需要区别对待。所以先检查company属性是否存在。

$user = User::with('company')->findOrFail(1);
if ($user->company === null)
{
$company = new Company(['name' => 'Test']);
$user->company()->save($company);
}
else
{
$user->company->update(['name' => 'Test']);
}

请注意,hasOne() 并不能保证您将拥有一对一的关系,它只是告诉 Eloquent 如何创建查询。即使你有多个 Company 引用相同的 User 它也能工作,在这种情况下当你调用 $user->company 时你会得到第一个 Company 在数据库的结果数据集中。

关于php - 在 Laravel 中保存一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32498142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com