4

Laravel 5 に新しいケースの作成ページがあり、サービスをケースにリンクできます。サービスは、私の createCaseForm のチェックボックスです。サービスはDBに保存されるので、多くのサービスを持つ多くのケースを持つようにManyToManyテーブルに書き込みます。

: case1 を作成するときに、service1 と service3 のボックスをチェックします。これで、manyToMany テーブルが正しく入力されました。ケースの編集ページに移動すると、デフォルトでチェックボックス 1 とチェックボックス 3 がオンになります。これらはすでに manyToMany テーブルにリンクされているためです。

Input::old('username'); のようなものを使用できることは知っています。テキストフィールド用ですが、チェックボックスに対してこれを行う方法がわかりません。

私はほとんどの場合LaravelCollectiveを使用しますが、これらのチェックボックスについては使用しませんでした。だからできればHTMLソリューションが欲しいのですが、もちろん可能であれば。

ありがとう

4

2 に答える 2

2

簡単な答え

 @foreach($services as $service)
      <input type="checkbox" name="services[]" value="{{ $service->id }}"
           @if (count($case->services->where('id', $service->id)))
               checked
           @endif>
 @endforeach

ケースとサービスの間に多対多の雄弁な関係があると仮定しています。つまり、これwhereはコレクション メソッドであり、クエリ ビルダーではありません。何も見つからない場合は、それ自体が真である空のコレクションを返します (したがってcount関数)。

しかし、より簡潔なアプローチとして、一度に 1 つの Case だけを見ている場合は、ケースに含まれるすべてのサービス ID の単純な配列を取得し、それをビューに渡します。

 // The eloquent way
 $case_services = $case->services->toArray();

 // Otherwise, just query for all service IDs
 $case_services = DB::table('case_services')->where('etc...')

 // You'll end up with something like [24, 47, 103, 287]

次に、ビューで、次のようなものを実行できます

 @foreach($services as $s)
      <input type="checkbox" name="{{ $s->name }}" value="{{ $s->service_id }}"
           @if( in_array($s->service_id, $case_services) ) checked="1" @endif />
 @endforeach

私は 2 番目の解決策が好きです。なぜなら、何が起こっているのかが分かりやすく、より予測しやすいからです。

于 2016-03-31T19:00:12.310 に答える