【问题标题】:Laravel Eloquent Relationship between users table and states table with states_id in users tableLaravel Eloquent 用户表和状态表之间的关系,用户表中有 states_id
【发布时间】: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) 怎么样 - 假设您的命名空间是默认的“应用程序”。我从来没有像你在关系上那样使用静态类吸气剂。另外,你定义了关系的倒数吗?

标签: php laravel eloquent


【解决方案1】:

如果我真的明白你想要什么,你真的必须通过添加第二个参数来更新你的用户类中的状态方法。

public function state()
{
    return $this->belongsTo(State::class, 'states_id'); // if the column name in your users migration is state_id then you might not need the second param. 
}

然后就可以得到一个用户与状态的关系了

$users = User::with('state')->get();

我添加了states_id作为第二个参数,因为这是您在迁移中提供的列名

【讨论】:

  • 好吧,我没看到,但现在看到了。
猜你喜欢
  • 1970-01-01
  • 2021-03-26
  • 1970-01-01
  • 2020-05-06
  • 2014-07-06
  • 1970-01-01
  • 1970-01-01
  • 2019-12-15
  • 1970-01-01
相关资源
最近更新 更多