php - Eloquent IF clause - always returns true -
i using entrust's default table structure:
permissions table:
+--------------+------------------+------+-----+---------+----------------+ | field | type | null | key | default | | +--------------+------------------+------+-----+---------+----------------+ | 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 table:
+---------------+------------------+------+-----+---------+-------+ | field | type | null | key | default | | +---------------+------------------+------+-----+---------+-------+ | permission_id | int(10) unsigned | no | pri | null | | | role_id | int(10) unsigned | no | pri | null | | +---------------+------------------+------+-----+---------+-------+ roles table:
+--------------+------------------+------+-----+---------+----------------+ | field | type | null | key | default | | +--------------+------------------+------+-----+---------+----------------+ | 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 | | +--------------+------------------+------+-----+---------+----------------+ now, given role_id i'd select following database:
permissions.idpermissions.display_name- whether
permission_roletable contains entrypermission_id, givenrole_id
the last 1 turned out bit tricky in eloquent. sql query accomplishes exactly need (id replaced valid role id):
select p.id, p.display_name, if(pr.role_id = id, 1, 0) has_role permissions p left outer join permission_role pr on p.id = pr.permission_id; example output:
+----+--------------+----------+ | id | display_name | has_role | +----+--------------+----------+ | 1 | edit users | 1 | | 2 | view users | 0 | | 3 | delete users | 0 | +----+--------------+----------+ can me out here, on how using eloquent?
i've tried this, returns 1 (true) in third column, unlike sql query (as seen above).
$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) has_role')) ->get(); ideally, i'd without using db::raw, although fine if takes.
thanks in advance help!
structurally, query builder query you've shown looks fine.
what not fine left join. shouldn't this:
->leftjoin('permission_role', 'permission_role.permission_id', '=', 'permission_role.role_id') be this:
->leftjoin('permission_role', 'permission_role.permission_id', '=', 'permissions.id') ?
Comments
Post a Comment