Laravel 5.5,复选框列表(产品),如果用户有产品,则必须选中这些产品的复选框

Laravel 5.5, List of checkboxes (products), If user has product(s), checkboxes must be checked for those products

我有一个用户 table 有一个名为产品的列,在添加用户时有一个复选框(产品)列表,我可以在勾选复选框的同时添加产品。

问题出在编辑用户中,如果用户有产品 (abc),则应在编辑用户屏幕中选中(勾选)abc 复选框。我做不到。请帮忙。 提前致谢。下面是代码

这就是我用复选框调用产品的方式

@foreach($users as $user)
{{ Form::open([ 'files' => true, 'method' => 'post', 'route' => 'users.edit', 'class' => 'form']) }}
<div class="container" style="margin-top: 0; line-height: 50px; height: 50px;">
   <h4 class="module-title">Create User</h4>
</div>
<br clear="both"/>
@if (session('alert'))
<div class="alert alert-success">
   {{ session('alert') }}
</div>
@endif
<div class="container">
   <table class="table table-striped">
      <tr>
         <th>
            Username
         </th>
         <td>
            {{ Form::text('username',$user->username, ['class' => 'form-control']) }}
         </td>
      </tr>
      <tr>
         <th>
            New Password
         </th>
         <td>
            {{ Form::password('password', array('class' => 'form-control')) }}
         </td>
      </tr>
      <tr>
         <th>
            Role
         </th>
         <td>
            <div class="form-group">
               <select name="select_list1" class="form-control">
                  @if ($user->role == "admin")
                  <option value="admin" selected="selected">Admin</option>
                  <option value="user">User</option>
                  @endif
                  @if ($user->role == "user")
                  <option value="user" selected="selected">User</option>
                  <option value="user">Admin</option>
                  @endif
               </select>
            </div>
         </td>
      </tr>
      <tr class="products">
         <th>
            Product Type<br/>(After Changes please re-login)
         </th>
         <td>
            <table>
               @foreach($products as $product)
               <tr>
                  <td style="width: 32%;  padding-bottom: 5px;"><input type="checkbox" name="products[]" value="{{$product->name}}">
                     {{$product->name2}}
                  </td>
               </tr>
               @endforeach
            </table>
         </td>
      </tr>
      <tr>
         <th>
            Active
         </th>
         <td>
            <div class="form-group">
               <select name="select_list2" class="form-control">
                  @if ($user->active == 1)
                  <option value="1" selected="selected">Yes</option>
                  <option value="0">No</option>
                  @endif
                  @if ($user->active == 0)
                  <option value="0" selected="selected">No</option>
                  <option value="1">Yes</option>
                  @endif
               </select>
            </div>
         </td>
      </tr>
   </table>
   <hr/>
   <button type="Submit" name="save" class="btn btn-primary">
   Save
   </button>
   <br clear="both"/>
   <br/>
</div>
{{ Form::close() }}
@endforeach

你可以使用 Laravel Collective , select 字段来实现,看看下面的代码:

Form::select('select_list1', ['user' => 'User', 'admin' => 'Admin'], $user->role, ['placeholder' => 'Choose a role']);

第一个参数表示这个字段的名称

第二个参数表示你希望按key => value.

顺序呈现的数据数组

第三个参数表示default值,如果没有默认值,可以使用null

第四个参数(可选)表示要在表单元素上使用的属性数组(class、占位符、id 等)

检查用户 existing 产品 match 是否是来自 product list 的产品并将其设为 checked.

<?php $products_array = explode(",",$user->products);?>
@foreach($products as $product)
           <tr>
              <td style="width: 32%;  padding-bottom: 5px;">
                 <input type="checkbox" name="products[]" value="{{$product->name}}" @if(in_array($product->name2, $products_array)) checked @endif>
                 {{$product->name2}}
              </td>
           </tr>
@endforeach

您只需要检查您的产品是否与您的用户产品匹配 如果您将 product code 保存在用户的 table 中,那么您的代码应该是这样的

<table>
    @foreach($products as $product)
        <tr>
           <td style="width: 32%;  padding-bottom: 5px;"><input type="checkbox" name="products[]" value="{{$product->name}}" {{$user->productCode == $product->code ? 'checked' : ''}}>
                 {{$product->name2}}
           </td>
        </tr>
    @endforeach
</table>

但是如果您将 product name 保存在用户的 table 中,那么您的代码应该是这样的

<table>
    @foreach($products as $product)
        <tr>
           <td style="width: 32%;  padding-bottom: 5px;"><input type="checkbox" name="products[]" value="{{$product->name}}" {{$user->productName == $product->name ? 'checked' : ''}}>
                 {{$product->name2}}
           </td>
        </tr>
    @endforeach
</table>

重点是,您只需要匹配您的产品 table 和用户 table 项目。这就像过滤所有具有相同值的项目。获取所有值后,再进行检查。

希望对您有所帮助 ;)

如果您像这样在产品列中存储产品:'abc'、'abc1'、'abc2'

<?php $userProductArr = explode(',',$user->products); ?>
@foreach($products as $product)
   <tr>
      <td style="width: 32%;  padding-bottom: 5px;">
         <input type="checkbox" name="products[]" value="{{$product->name}}" {{(in_array($product->name,$userProductArr) ?  checked : '' }}>
         {{$product->name2}}
      </td>
   </tr>

@endforeach