Laravel | Состояние флажка на странице редактирования

У меня есть страница создания для нового дела в Laravel 5, где я могу связать услуги с делом. Сервисы — это чекбоксы в моем createCaseForm. Службы хранятся в БД, поэтому я пишу в таблицу ManyToMany, чтобы иметь много дел, которые имеют много служб.

пример:
Когда я создаю case1, я устанавливаю флажки для service1 и service3. Так что теперь таблица manyToMany заполнена правильно. Теперь, когда я перехожу на страницу редактирования для дела, я хочу, чтобы checkbox1 и checkbox3 были отмечены по умолчанию, потому что они уже связаны в таблице manyToMany.

Я знаю, что вы можете использовать что-то вроде Input :: old (‘username’); для текстовых полей, но я не знаю, как сделать это для флажка.

Я использую LaravelCollective большую часть времени, но для этих флажков я не сделал. Поэтому желательно, чтобы я хотел HTML-решение, ЕСЛИ ВОЗМОЖНО, конечно.

Спасибо

3

Решение

Быстрый ответ

 @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

Я предполагаю, что у вас есть много-много красноречивых отношений между Cases и Services. Чтобы where это метод сбора, а не построитель запросов. Если он ничего не найдет, он вернет пустую коллекцию, которая сама по себе является правдивой (следовательно, count функция).

Но для более краткого подхода, если вы просто просматриваете один случай за раз, я хотел бы получить простой массив всех идентификаторов услуг, которые есть в деле, и передать его в представление.

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

Другие решения

Это пример кода, вы можете сделать это, если вы используете шаблон Blade, то сделайте это, 3-й параметр true / false для флажка / не установлен флажок

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

здесь вы передаете установленное значение БД вашей модели в чекбокс (в третьем параметре)

1

По вопросам рекламы [email protected]