Позвольте мне объяснить мою проблему.Я управляю приложением, которое позволяет назначать роли пользователям и предоставлять им доступ к различным схемам, с базой данных PostgreSQL
.
Я хотел бы видеть детали каждого пользователя, поэтому я хочу сказать, что хочучтобы увидеть все схемы + роли.
Итак, я сделал функцию getList()
, которая возвращает логин + пароль + роли + схемы.Вот функция :
public static function getList()
{
$db = DbConnect::getDb();
$q = pg_query("SELECT
u.usesysid as idUser, u.usename as login,
u.passwd as password,
ARRAY(SELECT b.rolname FROM pg_catalog.pg_auth_members m JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid) WHERE m.member = r.oid) as roles,
ARRAY(SELECT nspname FROM pg_namespace pn WHERE pg_catalog.has_schema_privilege(r.rolname, nspname, 'USAGE')= true AND nspname <> 'information_schema' AND nspname !~~ 'pg_%') as schemas
FROM pg_catalog.pg_roles r JOIN pg_catalog.pg_user u on(r.rolname=u.usename)
WHERE usename !~ 'postgres' ORDER BY 1;");
if ($data = pg_fetch_assoc($q)) {
do {
$users[] = new User($data);
} while ($data = pg_fetch_assoc($q));
return $users;
} else {
return null;
}
}
НО, (насколько я понял), мне нужно указать где-то в моем запросе array_to_json()
или json_build_array()
или что-то подобное, потому чтоМассивы в запросе (PostgreSQL
) возвращают строку в PHP, а не Массив.
Как видите:
8 =>
object(User)[9]
private '_idUser' => string '24733' (length=5)
private '_login' => string 'efefhhh' (length=7)
private '_password' => string '********' (length=8)
private '_roles' => string '{role1,role2}' (length=13)
private '_schemas' => string '{schematest,public,schematest2}' (length=31)
Поэтому мне действительно нужен массив PHP
, чтобы этот следующий код работал:
$list = UserManager::getList();
foreach ($list as $elt) {
echo '<p>' . $elt->getLogin() . '</p>';
echo '<p>' . $elt->getPassword() . '</p>';
$roles=$elt->getRoles();
//$roles=json_decode($roles); //Will be useful if I put a array_to_json() in the query of getList ?
if(isset($roles) && !empty($roles)){
echo '<p>Membership of :</p>';
echo '<ul>';
foreach ($roles as $role) {
echo '<li>'.$role.'</li>';
}
echo '</ul>';
}
$schemas=$elt->getSchemas();
//$schemas=json_decode($schemas); //Will be useful if I put a array_to_json() in the query of getList ?
if(isset($schemas) && !empty($schemas)){
echo '<p>Use schemas :</p>';
echo '<ul>';
foreach ($schemas as $schema) {
echo '<li>'.$schema.'</li>';
}
echo '</ul>';
}
}
Но я действительно не знаю, куда я могу положить array_to_json()
или json_build_array()
или что-нибудь еще ... Кто-нибудь может мне помочь?