我有一个权限表:
| id | name | Other stuff | parent_id
| 1 | name1 | ... | 3
| 2 | name2 | ... | 3
| 3 | groupName1| ... | null
在权限表中我拥有权限themsleves,这些权限是拥有parent_id的权限,我也有没有parent_id的组(父项),因为它们是父项。
所以,假设我想组织“li”标签中的组,并且我希望列出属于该组的所有权限。
我需要显示所有组名的SQL,而foreach组显示权限。我认为这需要几个'连接',(我有点像sql中的菜鸟)。
提前致谢。
编辑
以下是当前结果:open this
看到它所说的“Ver”,“Opção3”和“ADMIN”,它们是对齐的,我希望在这些列之外的两个列上都有相同的结果('listagem'和'manutenções')。
这是我目前的参考代码:
<li class="dropdown dropdown-large">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">MENU <b class="caret"></b></a>
<ul class="dropdown-menu dropdown-menu-large row">
<?php
$campos = DB::table('permissions as permission')
->select('permission.name as Grupo' , 'p.id' , 'p.name', 'p.parent_id', 'p.url')
->join('permissions as p','permission.id','=','p.parent_id')
->orderBy('permission.name')
->distinct()->get();
$nomeAntigo = null;
foreach($campos as $campo) {
$data = (array) $campo;
//SO METE AS PERMISSOES QUE O TIPO DE PERFIL PERMITE
if (Auth::user()->can($data['name'])){
if($nomeAntigo !== $data['Grupo']) {
$nomeAntigo = $data['Grupo'];
echo '<li class="col-sm-3">';
echo '<ul>';
echo ' <li class="dropdown-header"><b>'.$data['Grupo'].'</b></li>';
echo '</ul>';
echo '</li>';
}
echo '<li><a href="'.$data['url'].'">'.$data['name'].'</a></li>';
}
}
?>
</ul>
</li>
答案 0 :(得分:0)
有不同的解决方案。
1)使用多个查询(准备好的语句将是完美的)。第一个查询返回组。对于每个组,再次针对数据库查询以返回每个组的权限。
$prep = $pdo->prepare("SELECT id, name FROM permissions WHERE parant_id=?");
foreach($pdo->query("SELECT name FROM permissions WHERE parent_id IS NULL") as $row) {
$r = $prep->execute([$row['id']]);
// loop through it and echo
}
2)我不确定以下是英文的正确名称。在德语中它是“Gruppenbruch”。翻译成englisch它就像“控制休息”。 (如果有人知道正确的名字,请编辑或留下评论)
SELECT pg.name as groupName, p.id, p.name, p.parent_id FROM permissions as pg
INNER JOIN permissions as p ON pg.id = p.parent_id
ORDER BY pg.name, p.name
这是查询的工作方式:http://sqlfiddle.com/#!9/e8fda1/2
现在您可以执行类似
的操作$resultset = $pdo->query(QUERY_FROM_ABOVE); // pdo
$oldGroupName = null;
foreach($resultset as $record) {
if($oldGroupName != $record['groupName']) {
if($oldGroupName != null) echo "</ul>";
echo "<h1>".htmlentities($record['groupName'])."</h1>";
echo "<ul>";
}
echo "<li>".$record['name']."</li>";
}
echo "</ul>";