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

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

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

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

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

Спасибо


person nclsvh    schedule 31.03.2016    source источник
comment
Пожалуйста, опубликуйте код, пожалуйста   -  person Claudio King    schedule 31.03.2016
comment
‹input type=checkbox name=some_name @if($case-›some_name) checked @endif //при условии, что $case-›some_name содержит логическое значение (1 или 0)   -  person Hrach    schedule 31.03.2016


Ответы (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).

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

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

Мне просто нравится второе решение, потому что проще сказать, что происходит, и оно более предсказуемо для меня.

person Captain Hypertext    schedule 31.03.2016

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

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

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

person Qazi    schedule 31.03.2016