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 关系未显示来自所有关系的数据