将原始查询从刀片分离并转换为雄辩的laravel

时间:2016-03-31 19:42:12

标签: laravel-5 laravel-blade

问题是我不想查询内部刀片,因为它有一个坏主意,我有2个表:

  

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

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

@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
  

据我所知,使用eloquent加入上面的选择查询我使用它   :

$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();  

在查找刀片中的循环内容时总是有问题。我以前的尝试是在控制器中执行for循环并在刀片中预先设置它,对于$ i值,我得到id_kriteria值,但我想知道如何在控制器中查询它,同时在刀片和回声中获取$ i值#34; kriteria_name&#34;和&#34;成绩&#34;和&#34; $ i&#34; ?

编辑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);
    }  

控制器部分(不要了解&#34; nis&#34;值,因为我从请求中得到它的整数):

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

2 个答案:

答案 0 :(得分:0)

您的控制器将是这样的:

$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

试试这个并检查它是否有帮助......

答案 1 :(得分:0)

好的,我明白了。首先,我需要修复关系,使用新的食物表创建多对多的关系,我将获得数据透视表。

//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
  

并完成,它有效!!!