在Laravel中保存一对一关系。

9 浏览
0 Comments

在Laravel中保存一对一关系。

一个用户只拥有一个(或零个)公司,而一个公司只属于一个用户。我尝试为一个用户保存一个公司,但每次重新触发保存方法时,它都会在数据库中添加一个新条目。这是一对一的关系,所以我认为应该在用户上调用保存方法。\n因此,公司有一个方法叫做user():\n

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

\n而用户有一个方法叫做company():\n

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

\n我试图像这样保存(创建或更新)一个用户的公司(在控制器中):\n

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

\n第一次运行这段代码时,它会在数据库中创建条目(没问题),但第二次运行时,它会为同一个用户添加一个新条目(有问题)。我原以为它只会更新数据库中的条目。\n这是Laravel中的一个错误(或者是我在一对一关系中没有理解的地方),还是我做错了什么?(我认为并希望是第二种情况)

0
0 Comments

问题:在Laravel中如何保存一对一关系?

原因:问题的出现是因为需要保存用户的公司信息。

解决方法:可以使用Laravel中的updateOrCreate方法来实现保存一对一关系。具体代码如下:

User::findOrFail(1)->company()->updateOrCreate([],['name' => 'xyz']);

在updateOrCreate方法的第一个参数中传入一个空数组,因为公司的id是由hasOne关系$user->company()决定的。

另外,建议在hasOne关系中不要使用自增id字段。如果在公司表中将user_id设置为主键,就不可能为一个用户创建重复的公司记录。

0
0 Comments

问题的出现原因:在Laravel中保存一对一关系时,需要先检查用户是否已经关联了一个公司,如果没有关联,则创建一个新的公司并将其与用户关联。然后将公司的名称设置为"Test",最后保存关联关系。

解决方法:使用三元运算符检查用户是否已经关联了一个公司,如果没有则创建一个新的公司。然后将公司的名称设置为"Test",最后保存关联关系。

文章内容如下:

在Laravel中保存一对一关系非常简单。下面的代码展示了一个快速而简洁的方法:

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

在这段代码中,我们首先使用User::findOrFail(1)方法找到ID为1的用户。然后,我们使用$user->company方法检查用户是否已经关联了一个公司。如果用户已经关联了一个公司,我们将使用该公司。否则,我们将创建一个新的公司。

接下来,我们将新的公司的名称设置为"Test"。最后,我们使用$user->company()->save($company)方法将公司与用户关联并保存关系。

这种方法非常简洁和高效,使用三元运算符检查用户是否已经关联了一个公司,并根据需要创建新的公司。最后,我们将公司的名称设置为"Test",并保存关联关系。

这种方法得到了许多人的赞赏,被认为是一种快速和干净的解决方案。如果你也需要在Laravel中保存一对一关系,可以尝试使用这种方法。

0
0 Comments

问题的出现原因:在laravel中,创建和更新需要分别处理。因此,首先要检查公司属性的存在。

解决方法:

$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`。

非常感谢。"需要注意的是hasOne()不能保证你会有一对一的关系,它只是告诉Eloquent如何创建查询" -> 非常有帮助,现在已经很清楚了。

0