gpt4 book ai didi

php - Laravel 多对多从另一个表获取数据

转载 作者:行者123 更新时间:2023-11-29 18:13:38 24 4
gpt4 key购买 nike

我是一个 Laravel 新手,我快要疯了。好吧,也许我在那个项目上主演的时间太长了。我陷入了以下情况:

我正在为企业打造一本“日记”。我的数据库中的表格如下。

我的目标是,只有同一企业内的用户才能看到与其企业相关的报告。因此,在我的 reportController 中,我的索引方法中有以下几行:

$enterpriseId = Auth::user()->enterprise_id;
$enterpriseProjects = Enterprise::find($enterpriseId)->projects()->get();
$enterprises = Enterprise::find($enterpriseId);
foreach ($enterprises->projects as $key => $pivotTableProject) {
$reports = Report::where('project_id', $pivotTableProject->pivot->project_id)->get();
}

return view('reports.index')->with('reports', $reports);

正如预期的那样,我从数据库中只获得了一项。如何获取同一企业的所有内容?如果我将报告放入数组中,我会得到以下结果(使用 dd):

array:2 [▼
0 => Collection {#250 ▼
#items: array:1 [▶]
}
1 => Collection {#239 ▼
#items: array:1 [▶]
}
]

但我需要一个包含一个数组和其中的报告的集合。谁能帮助绝望的 Laravel 新手?

提前致谢。 Image of database part here

最佳答案

有很多方法可以实现这一点,这是一种解决方案。它只是一个代码片段(不是完整的解决方案。我在设置像您正在构建的系统时遇到一些麻烦)。

我实现它的方式是使用约束嵌套的急切加载关系。

$reports = Report::with([
'project' => function ($project) use ($enterpriseId) {
return $project->with([
'enterprise_project' => function ($enterprise_project) use ($enterpriseId) {
return $enterprise_project->with([
'enterprise'=>function($enterprise) use($enterpriseId){
return $enterprise->where('id', $enterpriseId);
}
]);
}
]);
}
])->get();

为了让这个解决方案发挥作用,我假设您已经

    Report 模型中的 project 方法用于连接 Project 模型。 Project 模型中的 enterprise_project 方法,用于连接数据库表 enterprise_project
  • enterprise_project 模型中的enterprise 方法连接到数据库中的enterprise 表/模型。

如果很难理解上面的代码或有任何困惑,请阅读 laravel 文档中的约束急切加载部分( link )

PS:如果代码有任何问题,请随时评论/编辑答案。

关于php - Laravel 多对多从另一个表获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47206436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com