【问题标题】:Finding nested results inside Laravel blade template在 Laravel 刀片模板中查找嵌套结果
【发布时间】:2018-11-23 19:53:18
【问题描述】:

我真的希望我不会因为一个模糊的问题而被骂,但我正在努力寻找一个好的答案。我正在寻找在 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 函数,但这需要为每次迭代查询数据库以查看权限是否已分配给该用户。

我想的另一种方法是将权限表完全引入刀片模板,即将它与其他数据压缩,然后与数组数据进行比较。我认为速度更快,但仍在做很多工作。如果我有 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

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

我知道我可能要求的是不存在的效率。

【问题讨论】:

  • 如果您发布用户/权限模型关系会很好。
  • 我很抱歉。添加了表结构。可能没有比简单地检查每个循环更好的方法了。

标签: php laravel eloquent laravel-blade


【解决方案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>

好吧,无论如何,这是我能想到的最好的:/

【讨论】:

    猜你喜欢
    • 2020-09-26
    • 1970-01-01
    • 2015-12-01
    • 2020-11-08
    • 2015-06-05
    • 2013-04-29
    • 2014-11-19
    • 2017-01-10
    相关资源
    最近更新 更多