我是一个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新手吗?
答案 0 :(得分:0)
有很多方法可以实现这一点,这是一个解决方案。 它只是一个代码片段(不是一个完整的解决方案。我在建立一个像你正在构建的系统时遇到一些麻烦)。
我实现它的方式是使用约束嵌套的关系加载。
$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();
为了解决这个问题,我假设你有
project
模型中连接Report
模型的Project
方法。enterprise_project
的{{1}}模型中的Project
方法。enterprise_project
模型中的enterprise
方法连接到数据库中的enterprise_project
表/模型。如果难以遵循上述代码或任何混淆,请阅读laravel doc(link)
中的约束预先加载部分PS:如果代码有问题,请随时评论/编辑答案。
答案 1 :(得分:0)
最后我用这些行解决了昨天的问题:在我的ReportController中
# AE = \u00C4, ae = \u00E4
# OE = \u00D6, oe = \u00F6
# UE = \u00DC, ue = \u00FC
# SZ = \u00DF
在我看来,我通过2个foreach-loops显示结果(当然不是最好的解决方案,但它适用于我)。谢谢你的帮助@HasilT。你把我推向正确的方向。