Laravel集团通过外键

时间:2017-07-30 07:56:27

标签: php mysql laravel eloquent

我有三个模特

  1. Project
  2. Category
  3. Drawing
  4. 它们之间的关系如下

    1. 绘制belongs to类别
    2. 同时绘制belongs to项目
    3. 绘图表:

      • id
      • 姓名
      • PROJECT_ID
      • CATEGORY_ID

      项目表:

      • id
      • 姓名

      类别表:

      • id
      • 姓名

      我想打印按类别名称分组的特定项目的所有图纸,如下所示:

      类别X
          *图1
          *图2

      类别Y
          *图3
          *图4

      如果此特定项目没有图纸,我不想打印类别。

      这就是我所坚持的:

      Project->drawings()->groupBy('category_id');
      

      提前谢谢

2 个答案:

答案 0 :(得分:4)

为了获得您想要的输出,从类别的方向更容易解决问题。

以下内容将查找所有类别,其中包含属于指定$projectId的图纸,但仅包含实际具有一个或多个图纸的类别。

$projectId = 123;

$projectScope = function ($query) use ($projectId) {
    return $query->where('project_id', $projectId)
});

$categories = Category::with(['drawings' => $projectScope])
    ->whereHas('drawings', $projectScope)
    ->get();

答案 1 :(得分:0)

你可以这样做

$categories = Category::whereIn('id',$project->drawings()
                      ->groupBy('category_id')
                      ->pluck('category_id')
              )->get();

现在,迭代$categories喜欢

@foreach($categories as $category)

    // display category name as {{$category->name}}

    @foreach($category->drawings() as $drawing)

         // display drawings as {{$drawing->name}}

    @endforeach

@endfoeach

希望你明白。