我真的希望我不要因为一个模糊的问题而大喊大叫,但我一直在努力寻找一个好的答案。我正在寻找一种最有效的方法来检查Laravel刀片模板中的嵌套匹配。
我对PHP很酷,但是仍然习惯于使用框架,并且我正尝试着使用它(最有效)。
我有一个编辑用户页面,我的用户被分配了权限。就像论坛一样,实际上有数百种权限可供选择。
显示编辑页面,下面是一个可能的权限表,其中带有单选按钮的是/否。
@foreach($permissionsAvailable as $permission)
<tr>
<td class="hub3Blue hub3FontSmall">{{ $permission->name }}</td>
<td class="hub3FontSmall">{{ $permission->description }}</td>
<td>
<form name="{{$permission->id}}">
<div class="form-group">
<div class="form-check form-check-inline">
<input class="form-check-input permissionCheck" type="radio" id="{{$permission->id}}"
onclick="sendPermission('{{$permission->id}}','yes')" name="hasPermission">
<label class="form-check-label" for="hasPermission">Yes</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input permissionCheck" type="radio" id="{{$permission->id}}"
onclick="sendPermission('{{$permission->id}}','no')" name="hasPermission">
<label class="form-check-label" for="hasPermission">No</label>
</div>
</div>
</form>
</td>
</tr>
@endforeach
有一个jQuery函数可以更新Permission_user表,添加或删除权限。这可以。我试图实现的是一种是否选中所有“是/否”单选按钮的方法,但是我正在努力做到这一点的“最佳实践”。
我认为最简单的方法是在页面底部包含一个PHP函数,但这需要在数据库中查询每次迭代,以查看权限是否已分配给该用户。
我想的另一种方法是将权限表完全带到刀片模板中,即将其与其他数据压缩在一起,然后与数组数据进行比较。我认为是Speedier,但仍然需要做很多工作。如果我有100个用户,并具有100个可能的权限,则[潜在地]可能是10,000个条目的数组。
一些指导,我们将不胜感激。
SQL结构/关系
Table: permission_user
+---------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| permission_id | int(10) unsigned | NO | MUL | NULL | |
| user_id | int(10) unsigned | NO | MUL | NULL | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
+---------------+------------------+------+-----+---------+----------------+
因此,在循环权限表时,它需要检查每个permission_id
,以查看是否有一行与相应的user_id
存在。
check if [row_exists] in permission_user WHERE permission_id = permission_id AND user_id = user_id
...是我最好的描述方式。
我知道我可能正在要求一种根本不存在的效率。
答案 0 :(得分:1)
好的,所以我这样做的目的是错误的,我认为这表明我的Laravel / Eloquent使用新手水平。我应该已经在用户控制器中获得了页面加载时所有可用的权限,然后将该数组传递给刀片服务器模板进行检查。
首先在我的控制器中获得我所有用户的权限:
$userPermissions= AdminUsersPermissions::where('user_id', $id)->get();
return view('admin.users.edit',compact('user','permissionsAvailable','userPermissions'));
然后在我的刀片模板中:
foreach($userPermissions as $permission)
{
$hasPermissions[] = $permission->permission_id;
}
然后,当我遍历权限时,我可以说:
$checkedNo = "checked";
$checkedYes = "";
if(in_array({{$permission->id}}, $hasPermissions)
{
$checkedYes = "checked";
$checkedNo = "";
}
对于表单条目:
<div class="form-check form-check-inline">
<input class="form-check-input permissionCheck" type="radio" id="{{$permission->id}}" onclick="sendPermission('{{$permission->id}}','yes')" name="hasPermission" <?=$checkedYes;?> >
<label class="form-check-label" for="hasPermission">Yes</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input permissionCheck" type="radio" id="{{$permission->id}}" onclick="sendPermission('{{$permission->id}}','no')" name="hasPermission" <?=$checkedNo;?> >
<label class="form-check-label" for="hasPermission">No</label>
</div>
那是我想出的最好的方法:/