繁体   English   中英

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

[英]Finding nested results inside Laravel blade template

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

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

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

好的,所以我这样做的目的是错误的,我认为这表明了我的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>

好吧,这是我所能提出的最好的结果:/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM