Я использую структуру таблицы по умолчанию Entrust в:Eloquent IF условие - всегда возвращает истину
разрешения таблицы:
+--------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | UNI | NULL | |
| display_name | varchar(255) | YES | | NULL | |
| description | varchar(255) | YES | | NULL | |
| created_at | timestamp | NO | | NULL | |
| updated_at | timestamp | NO | | NULL | |
+--------------+------------------+------+-----+---------+----------------+
permission_role стол:
+---------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+------------------+------+-----+---------+-------+
| permission_id | int(10) unsigned | NO | PRI | NULL | |
| role_id | int(10) unsigned | NO | PRI | NULL | |
+---------------+------------------+------+-----+---------+-------+
роли таблицы:
+--------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | UNI | NULL | |
| display_name | varchar(255) | YES | | NULL | |
| description | varchar(255) | YES | | NULL | |
| created_at | timestamp | NO | | NULL | |
| updated_at | timestamp | NO | | NULL | |
+--------------+------------------+------+-----+---------+----------------+
Нет ж, учитывая ROLE_ID Я хотел бы получить выбрать следующие из этой базы данных: содержит
permissions.id
permissions.display_name
- ли
permission_role
таблицу запись сpermission_id
и заданнойrole_id
Последний оказался немного сложным в «Красноречии». Этот SQL-запрос выполняет точно то, что мне нужно (ID очевидно заменяется действительным роль ID):
SELECT p.id, p.display_name, IF(pr.role_id = ID, 1, 0) AS has_role
FROM permissions p
LEFT OUTER JOIN permission_role pr ON p.id = pr.permission_id;
Пример вывода:
+----+--------------+----------+
| id | display_name | has_role |
+----+--------------+----------+
| 1 | Edit users | 1 |
| 2 | View users | 0 |
| 3 | Delete users | 0 |
+----+--------------+----------+
Может кто-нибудь помочь мне здесь, о том, как делать это с помощью Eloquent?
Я пробовал это, но он всегда возвращает 1
(true) в третьем столбце, в отличие от SQL-запроса (как видно выше).
$result = DB::table('permissions')
->leftJoin('permission_role', 'permission_role.permission_id', '=', 'permission_role.role_id')
->select(DB::raw('permissions.id, permissions.display_name, IF(permission_role.role_id = ID, 1, 0) AS has_role'))
->get();
В идеале я хотел бы сделать это без использования DB::raw
, хотя это вполне нормально, если это то, что он принимает.
Заранее благодарим за любую помощь!
В версии Eloquent вы заменили «ID» действительным идентификатором роли? Должен код, который это делает. – Barmar