【发布时间】:2020-04-04 16:51:54
【问题描述】:
我正在尝试找出 laravel 中的关系并且已经走到了尽头,所以我想我会在这里发布我的第一个问题,希望能弄清楚。我通常可以在这里找到答案,但这次不行。
我有这样的用户表:
- 身份证
- 名字
- 姓氏(等)
- address_1(等)
- state_id
- 城市(等)
然后我有一个状态表
- 身份证
- state_abrv
- 州名
现在根据我的收集,Eloquent 希望将 users_id 存储在 states 表中,而不是 states_id 存储在 users 表中,但这没有意义,因为您必须一遍又一遍地重复状态。
在我的用户模型上我尝试过
public function state()
{
return $this->belongsTo(State::class);
}
和
public function state()
{
return $this->hasOne(State::class);
}
但我认为它是在 states 表而不是 users 表上寻找外键。我在这里想念什么?
我想获取所有用户的列表,例如在显示用户详细信息视图中显示他们的状态,而无需第二次查询来将所有状态放入一个数组并从该数组中获取他们的状态。
喜欢
$users = User::with('state')->get();
【问题讨论】:
-
更深入地阅读 Eloquent 关系的文档。该方法将是您的第一次尝试。如果您遵循 Laravel 的数据库表/列命名约定,则不需要在
State::class之后为belongsTo()设置附加参数。我认为这种情况下的错误可能是字段states_id需要是state_id -
Laravel 使用库进行单数/复数转换来管理这类事情
-
我已经多次阅读 Eloquent 关系文档,并且几天来一直在寻找答案,但没有任何运气。一对一 Eloquent 会尝试将 Phone 模型中的 user_id 与 User 模型中的 id 匹配。在我的情况下,我需要 users 表上的 states_id 而不是 states 表。
-
这与命名约定无关,我用了很长时间,完全理解。这仅与关系有关。
-
用
$this->belongsTo('App\State');替换$this->belongsTo(State::class)怎么样 - 假设您的命名空间是默认的“应用程序”。我从来没有像你在关系上那样使用静态类吸气剂。另外,你定义了关系的倒数吗?