有没有办法在视图中使用where语句?
在第二个选择输入中,我想列出之前选定年份的所有车辆品牌。
<select data-placeholder=" 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=" 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(...) }}
答案 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=" 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=" 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>