2017-09-19 11 views
0

ビュー内でwhereステートメントを使用する方法はありますか?Laravelビューでwhere関数を呼び出すにはどうすればよいですか?

2番目の選択入力では、前に選択した年のすべての車種をリストします。

<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を使用して2番目の選択で追加する – 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)を参照してください。あなたが出てくる場合、

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

しかし:

<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

誰にでも私の答えを下落させたのは、あなたがそのように感じる理由を表明することなく答えを下降させるだけのことではない。そうでなければ、あなたの投票は誰にも役に立ちません。 – GoogleMac

+0

あなたは正しいです@GoogleMacのコメントは、投票が終了したときに強制されるべきです。しかし、私はあなたの答えにいくつかの問題を発見しました。 OPの質問に直接答えるのではなく、コードに問題があります。他の人がそれを答えとして混同しないように、回答の対象となる投稿の部分を明確にすることができます。私はあなたの答えに投票した人ではありませんでした。 –

+0

@OmisakinOluwatobi、私の答えの最初の行は私が気づいた間違いを指摘した。彼や他の人が気づいていなかった場合に備えて、私はOPのための情報を少し入れました。それからjQueryで簡単に答えました。私はおそらくもう少し良い構造にすることができます..あなたの入力をありがとう! – GoogleMac

1

はい、あなたはどこにでもこのようにブレードにここで、()を使用することができます:ここでは

は、jQueryの答えの迅速なバージョンです。ビューで雄弁を使うと、コード設計に何か問題があることを意味します。

ユーザーが最初の選択を選択した後、選択したmakeを使用してページをリロードする必要があります。次に、今使っているコードのwhere()ステートメントで使用できます。リロードがない場合、どこに置くべきかを記述することはできません()。ページをリロードする場合は、実際にはブレードでwhere()を使用する必要はありません。

where()をパノラマで表示するループでは、 (アイテム数が大きすぎない場合)

また、AJAXを使用して、車両が選択された後に「make」のリストを取得することができますコメントに記載されているとおりです。

関連する問題