【问题标题】:Laravel | Checkbox state on edit page拉拉维尔 |编辑页面上的复选框状态
【发布时间】:2016-07-20 04:24:17
【问题描述】:

我在 Laravel 5 中有一个新案例的创建页面,我可以在其中将服务链接到案例。这些服务是我的 createCaseForm 中的复选框。服务存储在数据库中,因此我写入了一个 ManyToMany 表以包含许多具有许多服务的案例。

示例: 当我创建 case1 时,我选中了 service1 和 service3 的复选框。所以现在 manyToMany 表已正确填写。现在,当我转到案例的编辑页面时,我希望默认选中 checkbox1 和 checkbox3,因为它们已经链接在 manyToMany 表中。

我知道你可以使用 Input::old('username');对于文本字段,但我不知道如何为复选框执行此操作。

我大部分时间都使用 LaravelCollective,但对于这些复选框我没有。所以最好我想要一个 HTML 解决方案,当然如果可能的话。

谢谢

【问题讨论】:

  • 请贴一些代码
  • some_name) 已检查 @endif //假设 $case->some_name 包含布尔值(1 或 0)

标签: php laravel checkbox laravel-5.2 laravelcollective


【解决方案1】:

快速回答

 @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 函数)。

但对于更简洁的方法,如果您一次只查看一个案例,我会继续获取该案例拥有的所有服务 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】:

    这是示例代码,你可以这样做,如果你使用 Blade 模板,那么这样做,第三个参数是 true/false 来选中/取消选中复选框

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

    在这里,您将模型 DB 存储的值传递给复选框(在第 3 个参数中)

    【讨论】:

      猜你喜欢
      • 2017-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-20
      • 1970-01-01
      • 2020-02-23
      • 2021-03-22
      • 2016-10-31
      相关资源
      最近更新 更多