在Laravel刀片模板中查找嵌套结果

时间:2018-11-23 19:53:18

标签: php laravel eloquent laravel-blade

我真的希望我不要因为一个模糊的问题而大喊大叫,但我一直在努力寻找一个好的答案。我正在寻找一种最有效的方法来检查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

...是我最好的描述方式。

我知道我可能正在要求一种根本不存在的效率。

1 个答案:

答案 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>

那是我想出的最好的方法:/