将本机查询从 blade 分离并转换为 eloquent laravel

Separate and convert native query from blade to eloquent laravel

问题是我不想在 blade 内部查询,因为这是个坏主意,我有 2 个表:

"kriterias" table (id_kriteria, kriteria_name)
"evaluasis" table (id_food, id_kriteria, grade)

这就是我的问题开始的地方,我希望在我的 blade 视图中应用此代码:

@for ($i=1;$i<=$jlhkriteria;$i++)
                    <?php $evaluasi = mysqli_query($mysqli, "SELECT k.kriteria_name,e.id_kriteria,e.grade FROM evaluasis e, kriterias k WHERE
                e.id_food='$nis' AND e.id_kriteria='$i' AND e.id_kriteria=k.id_kriteria");
                    $hasil = mysqli_fetch_array($evaluasi, MYSQLI_ASSOC); ?>

<?php echo $hasil['kriteria_name']; ?>
<?php echo $hasil['grade']; ?>
<?php echo $i; ?>

@endfor

As far as I know to join select query above using eloquent I use this :

$evaluasi = Kriteria::with(array('evaluasi' => function($query) use ($nis) { 
        $query  ->where('id_food', $nis)
            ->where('id_kriteria',$i)//this $i value are get from for loop in blade
            ->select('id_kriteria', 'grade'); 
    }))->firstOrFail();  

在 blade 中查询 for 循环内的内容时,我总是遇到问题。我之前的尝试是在控制器中执行 for 循环并在 blade 中进行 foreach,对于 $i 值我得到 id_kriteria 值,但我想知道如何在获取 $i 值时在控制器中查询它在 blade 和 echo "kriteria_name" 和 "grade" 和 "$i" 中?

编辑 1:
添加模型和控制器 并为其建立模型:

Kriteria Model
    public function evaluasi()
    {
        return $this->hasMany(Evaluasi::class, id_kriteria, id_kriteria);
    }

Evaluasi Model
    public function kriteria()
    {
        return $this->belongsTo(Kriteria::class, id_kriteria, id_kriteria);
    }  

控制器部分(不要担心 "nis" 值,因为我从请求中得到它是整数):

$jlhkriteria = Kriteria::count();
return view('rank', compact('nis', 'jlhkriteria));  

你的控制器将是这样的:

$kriteria = Kriteria::with('evaluasi')->get();
return view('rank', compact('kriteria'));  

在您看来:

@foreach ($kriteria as $k)
    {{ $k->kriteria_name }}
    {{ $k->id }}

    @foreach ($k->evaluasi as $e)
        {{ $e->grade }}
        {{ $e->id }}
    @endforeach
@endforeach

试试看是否有帮助...

好的,我明白了。首先,我需要修复关系,使用新食物 table 创建多对多关系,然后我将获得枢轴 table.

//Kriteria Model
    public function food()
    {
        return $this->belongstoMany(Food::class, "pivot_table", id_kriteria, id_food);
    }

//Food Model
    public function kriteria()
    {
        return $this->belongsToMany(Kriteria::class, "pivot_table", id_food, id_kriteria)->withPivot('grade');
    }  

控制器:

$nis = 1;
$evaluasis = Food::find($nis);
$hasils = $evaluasis->kriteria;

终于在视图中显示它:

@foreach($hasils as $hasil)
   <tr>
      <td>
          {{ $hasil->kriteria_name }}                            
      </td>
      <td>
          <input type=text name='grade{{ $hasil->id_kriteria }}' value='{{$hasil->pivot->grade }}'>          
      </td>
   </tr>
@endforeach

and done, it works!!!