Laravel Eloquent 所有与关系

Posted

技术标签:

【中文标题】Laravel Eloquent 所有与关系【英文标题】:Laravel Eloquent all with relationship 【发布时间】:2014-02-01 06:09:14 【问题描述】:

如何从 Laravel 中的关系表中获取所有数据?

所以,我有这样的表:

*users*
id
username
password
...

*address*
id
address
user_id
...

如果我用 Address::all() 调用我的 eloquent 模型,我会得到 user_id 的响应,并且我想建立关系以获取用户名。

我尝试添加:

public function users()
  return $this->belongsTo('Users', 'user_id');

并使用Address::with('users')->get() 调用,但响应为空。

【问题讨论】:

【参考方案1】:

您的用户类是 Users 还是 User?除非您覆盖它,否则 Eloquent 处理名称的默认方式可以在文档 (source) 中找到:

请注意,我们没有告诉 Eloquent 将哪个表用于我们的 User 模型。除非明确指定另一个名称,否则类的小写复数名称将用作表名。因此,在这种情况下,Eloquent 将假定 User 模型将记录存储在 users 表中。您可以通过在模型上定义表格属性来指定自定义表格

所以我相信如果您将地址模型中的代码更改为:

public function users()
  return $this->belongsTo('User', 'user_id');

因为我们已将Users 更改为User,所以它会起作用

【讨论】:

【参考方案2】:

你需要改变

public function users()
   return $this->belongsTo('Users', 'user_id');

public function users()
    return $this->hasOne(Users::class, 'user_id');

public function users()
    return $this->hasMany(Users::class, 'user_id');

【讨论】:

【参考方案3】:

另一种方式!

 class Users extends Model 
   //override table
   protected $table = 'users';
   protected $primaryKey = 'id';
   //Your other code here
 

并在地址模型中像这样添加

 public function users()
   return $this->belongsTo('App\Users', 'user_id');
 

【讨论】:

以上是关于Laravel Eloquent 所有与关系的主要内容,如果未能解决你的问题,请参考以下文章

laravel 返回与 eloquent 和 laravel 的关系

Laravel Eloquent group by 与数据透视表和关系

Laravel Eloquent 中的 Audit belongsTo 关系

多个 Laravel Eloquent 关系未显示来自所有关系的数据

如何使用 eloquent / etc 与 laravel 编写关系函数?

Laravel Eloquent 嵌套关系枢轴与约束