【问题标题】:hasOne() relationship can return many relationshiphasOne() 关系可以返回多个关系
【发布时间】:2021-10-04 14:57:13
【问题描述】:

User 模型与 PhoneNumber 类是一对一的关系:

public function phoneNumber() {
    return $this->hasOne(PhoneNumber::class);
}

然而,如果 PhoneNumber 表有多行具有相同的 user_id(例如 1),则 Eloquent 语句会返回多个模型。

$multiplePhoneNumbers = User::find(1)->phoneNumber()->get();

这就引出了一个问题,hasOne()hasMany() 关系的目的是什么?

【问题讨论】:

  • 我注意到的一个区别是如果您使用急切加载。 hasOne() 只返回 1(第一个匹配项), hasMany() 将返回多个。 ---- $userModelWithOnePhoneNumber = User::with('phoneNumber')->find(1);

标签: laravel eloquent eloquent-relationship


【解决方案1】:

phoneNumber() 返回查询构建器实例,您可以在其中附加更多方法,例如 where()orderBy()。从中调用 get() 只会执行查询,而无需添加 hasOne 逻辑。

在幕后,如果你正确使用它,关系将返回第一个结果。

User::find(1)->phoneNumber 将返回电话号码或 null。

【讨论】:

  • 你是对的。一起使用 find(1) 和 get() 是一个错误。我也应该知道比使用方法( phoneNumber() )之类的关系更好
猜你喜欢
  • 2020-05-16
  • 1970-01-01
  • 2021-08-15
  • 1970-01-01
  • 2020-10-06
  • 1970-01-01
  • 2016-02-29
  • 2020-07-31
  • 1970-01-01
相关资源
最近更新 更多