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.id
  • permissions.display_name
  • whether permission_role table contains entry permission_id , given role_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

Popular posts from this blog

java - pagination of xlsx file to XSSFworkbook using apache POI -

Unlimited choices in BASH case statement -

apache - How do I stop my index.php being run twice for every user -