Laravel可以从另一个表

时间:2017-11-09 16:05:07

标签: php mysql laravel eloquent

我是一个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

2 个答案:

答案 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方法。
  • 连接db表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。你把我推向正确的方向。