如何使用 Laravel Eloquent 返回多个关系?

问题描述 投票:0回答:2

我有一张名为

users
的桌子。每个用户都有不同的事情:

  • 国家
  • 设备
  • 电脑
  • 类别

我为上述每个“事物”创建了一个表格。类似于以下内容:

1 | United States
2 | United Kingdom
3 | Australia
4 | Canada
5 | Italy

等等...

我将这些值存储在用户表中,如下所示:

ID | Country | Device | Computer | Category |
---|---------|--------|----------|----------|
1  |       3 |      2 |        6 |        2 |
2  |       4 |      3 |        9 |        1 |

等等...

现在上面的每个数字都与对应的表的ID相关联了。

我想要的是进行 Eloquent 查询并搜索所有

users
并从辅助表中“替换”它们相应的值。

我正在考虑为

hasOne()
表中的每件事建立
users
雄辩的关系,但后来我不确定如何立即获取/调用它们。

谁能帮我解决这个问题?

php laravel laravel-5
2个回答
31
投票
$model = Model::with('relatedModel', 'relatedModelTwo')->get();

所以就你而言,可能是这样的。如果您只想使用

user
返回一个关系,请删除其他关系。

$user = User::with('country', 'Device', 'Computer', 'Category')->get();

当您

dd($user)
时,您应该在
relations
数组属性中看到相关模型。

要从那里访问关系的属性,很简单

$user->device->deviceAttribute

编辑评论:

Eloquent 将假设外键使用模型名称。因此,如果您的

user
表具有
id
列,则假定
device
表上有一列名为
user_id
。如果你这样做了,那么你就已经准备好了,不需要做任何事情。

如果您将列命名为将模型关联到其他内容,则需要将其作为关系方法中的第二个参数传递。

public function device()
{
    return $this->hasOne('App\Device', 'foreign_key_here',);
}

相反,如果你想获取设备所属的用户,Eloquent 将尝试将设备表上的

user_id
列与用户表上的
id
列进行匹配。和以前一样,如果您使用不同的列来关联它们,请将外键声明为第二个参数。

public function user()
{
    return $this->belongsTo('App\User', 'foreign_key_here',);
}

Laravel 文档一对一关系


1
投票

您正在寻找这个:

$books = App\Book::with('author', 'publisher')->get();

查看有关立即加载多个关系的文档。

© www.soinside.com 2019 - 2024. All rights reserved.