2016-03-31 16 views
2

Ich habe eine Seite erstellen für einen neuen Fall in Laravel 5, wo ich Dienste mit dem Fall verknüpfen kann. Die Dienste sind Kontrollkästchen in meinem createCaseForm. Die Dienste werden in der Datenbank gespeichert, so dass ich in eine ManyToMany-Tabelle schreibe, um viele Fälle zu haben, die viele Dienste haben.Laravel | Checkbox-Status auf Bearbeitungsseite

Beispiel: Wenn ich case1 erstelle, überprüfe ich die Felder für service1 und service3. Jetzt ist die manyToMany-Tabelle korrekt ausgefüllt. Wenn ich jetzt auf die Bearbeitungsseite für den Fall gehe, möchte ich, dass Checkbox1 und Checkbox3 standardmäßig aktiviert sind, da sie bereits in der manyToMany-Tabelle verknüpft sind.

Ich weiß, dass Sie etwas wie Input verwenden können :: alt ('Benutzername'); für Textfelder, aber ich weiß nicht, wie man das für eine Checkbox macht.

Ich benutze LaravelCollective die meiste Zeit, aber für diese Checkboxen habe ich nicht. Also am liebsten hätte ich eine HTML-Lösung, wenn möglich natürlich.

Dank

+0

Bitte geben Sie einen Code ein bitte –

+0

some_name) geprüft @endif // angenommen, dass $ case-> some_name boolescher Wert enthält (1 oder 0) – Hrach

Antwort

2

Die schnelle Antwort

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

Ich nehme an, Sie haben eine viel zu viele eloquente Beziehung zwischen Cases und Services. So dass where ist eine Sammlungsmethode, kein Abfrage-Generator. Wenn es nichts findet, gibt es eine leere Sammlung zurück, die von selbst truthy ist (daher die count-Funktion).

Aber für einen prägnanteren Ansatz, wenn Sie nur einen Fall nach dem anderen betrachten, würde ich fortfahren und ein einfaches Array aller Service-IDs, die das Gehäuse hat und in die Ansicht übergeben.

// 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] 

Dann Ihrer Ansicht nach kann man nur so etwas wie

laufen
@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 

ich genauso wie die zweite Lösung, weil es einfacher ist, zu sagen, was los ist, und ist besser vorhersehbar zu mir.

+0

Danke, das hat mit ein paar kleinen Verbesserungen funktioniert !! – nclsvh

0

Dieser Beispielcode ist, können Sie dies tun können, wenn Sie Blade-Vorlage verwenden, dann tun Sie dies, 3. Parameter ist wahr/falsch geprüft/un-geprüft

{!! Form::checkbox('agree', 1, ($model->checkbox ==1?true:null), ['class' => 'field']) !!} 
das Kontrollkästchen

hier Sie übergeben Ihrem Modell DB gespeicherten Wert (in der 3. param) Checkbox