2017-09-19 7 views
0

보기에서 where 문을 사용할 수 있습니까?Laravel 뷰에서 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(...) }} 
+0

즉석에서 처리하려면 결과를 반환하는 AJAX가 필요합니다. 간단히 말하자면, 경로에 게시하고 결과를 반환하고, 두 번째 선택에서 추가 할 jQuery를 사용하십시오. – mbozwood

+0

어딘가에 이렇게하는 방법에 대한 권장 문서가 있습니까? 내가 완전히 이해하고 있는지 확신 할 수 없다. – cvassios

+0

여기에 대한 답변을보십시오 : https://stackoverflow.com/questions/46250774/how-to-show-ajax-response-in-product-grid/46252134#46252134 그것은 당신에게가는 방법에 대한 몇 가지 힌트를 줄지도 모릅니다. 그것에 대해 – Michel

답변

-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> 
+1

누구에게나 내 대답을 downvoted, 그것은 당신이 왜 그런 생각을 표현하지 않고 답변을 downvote하지 않는 것이 일반적입니다. 그렇지 않으면 투표가 도움이되지 않습니다 .. – GoogleMac

+0

올바른 답변 @GoogleMac 의견은 다운 투표가 완료 될 때 시행되어야합니다. 그러나 나는 또한 당신의 대답에 몇 가지 문제점을 발견했다. OP의 질문에 직접 대답하지는 않았지만 그의 코드에 문제가 있습니다. 다른 사람이 대답으로 혼동하지 않도록 답변의 대상 부분을 명확하게 할 수 있습니다. Btw 나는 대답을 투표 한 사람이 아니 었습니다. –

+0

@OmisakinOluwatobi, 내 대답의 첫 번째 줄은 내가 알아 차린 실수를 지적했습니다. 그 또는 다른 사람들이 알지 못하는 경우에 대비하여 OP에 대한 작은 정보를 넣습니다. 그런 다음 jQuery에서 빠 른 대답을 마쳤습니다.아마 그것을 조금 더 잘 구조화 할 수 있습니다 .. 귀하의 의견을 보내 주셔서 감사합니다! – GoogleMac

1

예, 어디 이런 식으로 블레이드에서) 여기서 (사용할 수 있습니다 : 당신이 온다면,

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

그러나 보기에서 웅변을 사용하면 코드 디자인에 잘못된 점이 있음을 의미합니다. 다음은 몇 가지 제안 사항입니다.

사용자가 첫 번째 선택을 선택한 후에는 선택한 make로 페이지를 다시로드해야합니다. 그러면 코드 디자인의 where() 문에서 사용할 수 있습니다. 재로드가 없으면 어디에()를 넣어야 할지를 명시 할 수 없습니다. 페이지를 새로 고침하면 블레이드에서 where()를 사용할 필요가 없습니다.

where()를 루프에서보기 위해 사용하려면 패닝에서 모든 " (아이템 수가 너무 많지 않은 경우)

또는 AJAX를 사용하여 차량을 선택한 후 AJAX를 사용하여 "make"목록을 얻을 수 있습니다 , 코멘트에 언급되어 있습니다.