gpt4 book ai didi

php - Eloquent IF 子句 - 总是返回 true

转载 作者:搜寻专家 更新时间:2023-10-31 21:26:28 25 4
gpt4 key购买 nike

我正在使用 Entrust 的默认表结构:

权限表:

+--------------+------------------+------+-----+---------+----------------+
| 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 的条目

最后一个在Eloquent中竟然有点棘手。此 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 的情况下执行此操作,尽管如果需要的话,这完全没问题。

在此先感谢您的帮助!

最佳答案

从结构上看,您显示的查询构建器查询看起来不错。

看起来不错的是左连接。不应该这样:

->leftJoin('permission_role', 'permission_role.permission_id', '=', 'permission_role.role_id')

是这样的:

->leftJoin('permission_role', 'permission_role.permission_id', '=', 'permissions.id')

?

关于php - Eloquent IF 子句 - 总是返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35278694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com