如何在Laravel视图中调用where函数?

时间:2017-09-19 22:53:07

标签: laravel lumen

有没有办法在视图中使用where语句?

在第二个选择输入中,我想列出之前选定年份的所有车辆品牌。

<select data-placeholder="&nbsp;Year" class="chzn-select year" style="width:70px;" tabindex="1" id="year">
    <option value=""></option>
    @foreach($data['vehicle_years'] as $vehicle)
      <option value="{{ $vehicle->year }}">{{ $vehicle->year }}</option>
    @endforeach
</select>

<select data-placeholder="&nbsp;Year" class="chzn-select year" style="width:70px;" tabindex="1" id="year">
    <option value=""></option>
    @foreach($data['vehicle_makes'] as $vehicle)
        <option value="{{ $vehicle->make }}">{{ $vehicle->make }}</option>
    @endforeach
</select>

所以可能有以下几点:

{{ $vehicle->make->where(...) }}

2 个答案:

答案 0 :(得分:1)

是的,您可以通过这种方式在刀片中的任何位置使用where():

{{ $vehicle->where('make', $make)->get() }}

但是,如果你想在视图中使用eloquent,那就意味着代码设计中存在错误。以下是一些建议:

在用户选择第一个选择之后,您需要使用选定的make重新加载页面,然后,您可以在现在的代码设计中的where()语句中使用它。如果没有重新加载,则无法说明要放在where()中的内容。如果你要重新加载页面,那么,实际上你不需要在刀片中使用where()..

如果您要在视图中循环使用where(),最好加载所有&#34;车辆并制作&#34;在控制器中(如果项目数量不是太大),并使用它们(你可能需要一些js)

或者,您可以使用AJAX获取&#34; make&#34;选择车辆后,如评论中所述。

答案 1 :(得分:-2)

!!你不应该同时选择两个ID !!

请记住,PHP代码是在发送到客户端之前在后端生成的,因此除非您使用AJAX根据年份调用新列表并替换,否则无法使用刀片提供动态列表。旧的。但这很重要。如果您没有大量数据,我建议使用常规jQuery来显示/隐藏那些与正确年份不匹配的数据(可能是一年中的类)。更好的方法是使用Vue.js并使用v-if来检查该选项是否与上面选择的年份匹配。

有关详细信息,请参阅Laracasts - Learn Vue 2(第6集)。

以下是jQuery答案的快速版本:

<select data-placeholder="&nbsp;Year" class="chzn-select year" style="width:70px;" tabindex="1" id="year">
   <option value=""></option>
   @foreach($data['vehicle_years'] as $vehicle)
      <option value="{{ $vehicle->year }}">{{ $vehicle->year }}</option>
   @endforeach
</select>

<select data-placeholder="&nbsp;Year" class="chzn-select year" style="width:70px;" tabindex="1" id="make">
   <option value=""></option>
   @foreach($data['vehicle_makes'] as $vehicle)
      <option class="{{ $vehicle->year }}" value="{{ $vehicle->make }}">{{ $vehicle->make }}</option>
   @endforeach
</select>



<script>
   $(function() {

      var year = $('select#year');

      year.change(function() {

         var makes = $('select#make > option');

         makes.show(); // shows all

         // hides all that don't have the selected year as class
         makes.each(function( index ) {
             if ( !$(this).hasClass( year.val() ) ) $(this).hide();
         });

      });

   });
</script>