gpt4 book ai didi

php - 我怎样才能通过 Laravel 关系进行两次连接?

转载 作者:行者123 更新时间:2023-11-29 03:19:26 24 4
gpt4 key购买 nike

这是我的表结构:

// roles
+----+-------+
| id | name |
+----+-------+
| 1 | admin |
| 2 | stuff |
+----+-------+

//pages
+----+---------------------+
| id | path |
+----+---------------------+
| 1 | users/list |
| 2 | users/list/paginate |
| 3 | users/make |
| 4 | posts/add |
| 5 | posts/edit |
+----+---------------------+

page_role
+---------+----------+
| page_id | role_id |
+---------+----------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
| 1 | 5 |
| 2 | 4 |
| 2 | 5 |
+---------+----------+

我要做的就是获取每个角色的所有页面。我如何通过在 Laravel 中使用关系来做到这一点?


这是我目前使用纯 SQL 的解决方法:

SELECT p.* FROM roles r
INNER JOIN page_role pr on r.id = pr.role_id
INNER JOIN pages p on p.id = pr.page_id
ORDER BY p.id DESC

最佳答案

定义belongsToMany() Role 模型中的关系优先:

public function pages()
{
return $this->belongsToMany(Page::class);
}

然后,要获取每个角色的所有页面,请使用 with()方法:

$rolesWithPages = Role::with('pages')->get();

然后您将能够迭代角色和每个角色的页面:

@foreach ($rolesWithPages as $role)
Role: {{ $role->name }}<br>
@foreach ($role->pages as $page)
Page: {{ $page->title }}<br>
@endforeach
@endforeach

关于php - 我怎样才能通过 Laravel 关系进行两次连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47737570/

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