如何在数据透视表中检查匹配的两个值?

时间:2017-12-03 10:51:26

标签: mysql sql laravel

这是我的代码:

$role_id = Auth::user()->role_id;
$page_id = Page::where('path', $request->path())->where('method', $_SERVER["REQUEST_METHOD"])->first()->id;

所以我同时拥有role_idpage_id。我也有这样一张桌子:

// role_pages
+---------+---------+
| role_id | page_id |
+---------+---------+
| 1       | 1       |
| 1       | 2       |
| 1       | 4       |
| 1       | 8       |
| 2       | 1       |
| 2       | 3       |
| 2       | 7       |
| 3       | 1       |
| 3       | 9       |
+---------+---------+

注意role_pages(role_id, page_id)上有复合唯一索引。正如您所看到的,逻辑是:每个角色都有多个页面。

无论如何,我如何根据我的价值检查上表中是否有任何行?注意到我可以使用EXISTS()函数在纯SQL中执行此操作。但我想知道如何在laravel中做到这一点?

1 个答案:

答案 0 :(得分:2)

  

如何检查表格中是否有任何行

按照我所描述的contains()使用here方法。

示例:

$page = Page::where('path', $request->path())->where('method', $_SERVER["REQUEST_METHOD"])->first();
$page->roles()->contains(Auth::user()->role_id);

或者:

$role = auth()->user()->role;
$pageId = Page::where('path', $request->path())->where('method', $_SERVER["REQUEST_METHOD"])->first()->id;
$role->pages()->contains($pageId);