首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Foreach循环中的Laravel雄辩查询

Foreach循环中的Laravel雄辩查询
EN

Stack Overflow用户
提问于 2022-03-06 01:24:40
回答 1查看 407关注 0票数 0

再次回到另一个问题,我希望有人可能有一个想法,关于我正在处理的应用程序。

在这个教育评估应用程序中,我有一个与能力(类似于博客帖子类别)的一对多关系的评估,以及一个与Context(类似于博客标记)的多到多关系。

我正在尝试创建一个报表视图,该视图将允许我为每个能力和上下文组合显示一张卡片,然后计算所有存在该能力和上下文组合的评估(请考虑这一点,即计算每个类别和标签组合中的博客文章数量,即使该数字为0)。

到目前为止,我能够生成一份报告,其中列出了每个能力和上下文组合的卡片,但我不知道如何将这些信息传递给控制器,以便在查询中使用,从而找到相关的评估。

这里是我的报告视图

代码语言:javascript
复制
<x-app-layout title="{{ config('app.name', 'Laravel') }}">
  <div class="container grid px-6 mx-auto">
    <h2 class="my-6 text-2xl font-semibold text-gray-700 dark:text-gray-200">
      {{ __('Reports') }}
    </h2>
    <div class="grid gap-6 mb-8 md:grid-cols-2 xl:grid-cols-4">
      @foreach ($competencies as $competency) <br>
        @foreach ($contexts as $context)
          <div class="flex items-center p-4 bg-white rounded-lg shadow-xs dark:bg-gray-800">
            <div>
              <p class="text-lg font-semibold text-gray-700 dark:text-gray-200">
                {{ $competency->name}}
              </p>
              <p class="mb-2 text-sm font-medium text-gray-600 dark:text-gray-400">
                {{ $context->name }}
              </p>
              {{  $assessments }}
            </div>
          </div>
        @endforeach
      @endforeach
    </div>
</x-app-layout>

这里是我的报告控制器

代码语言:javascript
复制
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Assessment;
use App\Models\Competency;
use App\Models\Context;
use App\Models\User;

use Illuminate\Support\Facades\Auth;


class ReportController extends Controller
{
    public function index(Competency $competency, Context $context)
    {
        return view('dashboard.reports.index', [
            'competencies' => Competency::where('team_id', Auth::user()->currentTeam->id)->get(),
            'contexts' => Context::where('team_id', Auth::user()->currentTeam->id)->get(),
            'assessments' => Assessment::where('competency_id', $competency->id)->whereRelation('contexts', 'context_id', $context->id)->count(),
        ]);
    }
}

下面是报表视图中当前生成的图像:https://imgur.com/a/SQSf7UM

如果有更多的细节,请告诉我。

EN

回答 1

Stack Overflow用户

发布于 2022-03-06 02:06:09

最好在模型中声明这个关系,让我们假设:

  1. A评估有一个类别,
  2. 有许多上下文,

您可以使用它的模型创建一个额外的表来存储评估上下文(因为它可以有许多上下文),假设表名是assessment_contexts,模型名是AssesmentContext。或者您可以运行php artisan make:model AssessmentContext -m。至少它有2列,assessment_id和context_id,

然后在AssessmentContext内部,添加这个函数来创建一个简单的关系,

代码语言:javascript
复制
public function assessment() {
   return $this->hasOne(Assessment::class);
}

public function context() {
   return $this->hasOne(Context::class);
}

在评估模型中声明此功能,

代码语言:javascript
复制
public function competency() {
   return $this->hasOne(Competency::class);
}

public function contexts() {
   return $this->hasMany(AssesmentContext::class);
}

把这个添加到能力模型中,

代码语言:javascript
复制
public function assessments() {
   return $this->hasMany(Assessment::class);
}

对于上下文模型来说,

代码语言:javascript
复制
public function assessments() {
   return $this->hasMany(AssessmentContext::class);
}

您必须在评估表中添加外键,该表引用类别主键id (我建议您的列名为category_id)。

最后,在控制器中,您可以声明能力列表,在视图中,您可以访问所有相关数据。即:

代码语言:javascript
复制
return view('dashboard.reports.index', [
   'competencies' => Competency::where('team_id', Auth::user()->currentTeam->id)->get()
]);

内景,

代码语言:javascript
复制
@foreach ($competencies as $competency) <br>
   @foreach ($competency->assessments as $assessment)
      <div class="flex items-center p-4 bg-white rounded-lg shadow-xs dark:bg-gray-800">
         <div>
            <p class="text-lg font-semibold text-gray-700 dark:text-gray-200">
               {{ $competency->name}}
            </p>
            @foreach ($assessment->contexts as $context)
               <p class="mb-2 text-sm font-medium text-gray-600 dark:text-gray-400">
                  {{ $context->name }}
               </p>
            @endforeach
         </div>
      </div>
   @endforeach
@endforeach

这只是一个简单的关系方案,还有其他更好、更优的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71367076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档