gpt4 book ai didi

php - Laravel 关系内部如何运作?

转载 作者:行者123 更新时间:2023-11-29 06:42:23 25 4
gpt4 key购买 nike

我对 Laravel 关系感到非常惊讶,因为它在与左连接进行比较时给出了没有重复条目的结果。例如最近我尝试自连接有很多到同一个表

 public function parentMenu(){
return $this->hasMany(Page::class,'parent_page_id','id');
}

它返回以下结果

Array
(
[0] => Array
(
[id] => 1
[page_name] => Branch Details
[page_url] => #
[parent_page_id] => 0
[page_type] => 1
[created_at] => 2018-06-23 23:45:34
[updated_at] => 2018-06-23 23:45:34
[deleted_at] =>
[slug] => branch_detail
[parent_menu] => Array
(
[0] => Array
(
[id] => 2
[page_name] => Add Branch Detail
[page_url] => add-branch
[parent_page_id] => 1
[page_type] => 1
[created_at] => 2018-06-23 23:45:54
[updated_at] => 2018-06-23 23:45:54
[deleted_at] =>
[slug] => add_branch_detail
)

[1] => Array
(
[id] => 11
[page_name] => View Branch Detail
[page_url] => list-branch
[parent_page_id] => 1
[page_type] => 1
[created_at] => 2018-06-23 23:46:08
[updated_at] => 2018-06-23 23:46:08
[deleted_at] =>
[slug] =>
)

)

)

我也尝试找出查询

Array
(
[0] => Array
(
[query] => select * from `pages` where `pages`.`deleted_at` is null
[bindings] => Array
(
)

[time] => 0.82
)

[1] => Array
(
[query] => select * from `pages` where `pages`.`parent_page_id` in (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) and `pages`.`deleted_at` is null
[bindings] => Array
(
[0] => 1
[1] => 2
[2] => 4
[3] => 5
[4] => 7
[5] => 8
[6] => 9
[7] => 10
[8] => 11
[9] => 12
)

[time] => 0.86
)

)

现在我的问题是假设如果我尝试获得相同的结果,mysql 查询将是什么。因为我想知道内部关系查询是如何工作的?它会在内部执行 forloop 还是在查询本身中它将产生结果。

它还会在循环中执行单独的查询来检索子菜单列表吗?

最佳答案

Laravel 的事件记录实现不对其关系使用联接(其中一些关系是这样做的,但这是对于像 belongsToMany 这样需要使用数据透视表/中间表的关系)。

实际发生的情况是 Eloquent 将从表中获取相关键并执行另一个查询来获取所需的关系,例如

Post 有很多 Comment 并且数据库中有 3 个帖子,id 为 123

Post::with('comments')->get(); 

将导致:

查询 1

SELECT * from `posts`

查询 2

SELECT * FROM `comments` WHERE `comment`.`post_id` in ('1', '2', '3')

它将遍历第二个查询的结果并将其与第一个查询加载的模型进行匹配。

<小时/>

如果您想查看 Laravel 应用程序正在运行哪些查询,那么我建议安装:

除此之外,这些工具都会向您显示正在运行的查询。

关于php - Laravel 关系内部如何运作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50999115/

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