如何通过单个语句将嵌套关系提取到数组中

Posted

技术标签:

【中文标题】如何通过单个语句将嵌套关系提取到数组中【英文标题】:How can I fetch the nested relation through a single statement into an array 【发布时间】:2021-11-26 07:27:32 【问题描述】:

我有四个模型,每个模型之间都有很多关系。

A 有很多 B B 有很多 C C有很多D

我的主要模型是 A,我想通过 A 获取 D。我正在这样查询以获取 D。

A::with('B.C.D')->get();

我正在这样获取 D:

$answer = [];
foreach(A as a) 
    foreach(a->B as b)
        foreach(b->C as c) 
            foreach(c->D as d) 
                $answer[] = d;
            
         
    

但是我想把这些数组简化成一条语句,有可能吗?

【问题讨论】:

【参考方案1】:

您可以使用 laravel Helpers data_get() 轻松获取嵌套数据。 Laravel 有很多辅助函数。了解这些功能会有很大帮助。

在你的情况下:

data_get($variable, 'a.b.c')

【讨论】:

【参考方案2】:

您可以使用pluck()collapse()

A::with('B.C.D')->get()->pluck('B.*.C.*.D.*')->collapse();

它直接给你D的模型数据。

让我知道它是否解决了您的问题。

【讨论】:

快乐是我的全部。快乐编码:)

以上是关于如何通过单个语句将嵌套关系提取到数组中的主要内容,如果未能解决你的问题,请参考以下文章

UML中关系整理

UML中关系?你都了解吗

Mongoose:如何将子文档中的数组提取到父文档中的单个数组中

如何将嵌套的 JSON 对象转换为数组 Spring Boot?

SQL(雅典娜)中的取消嵌套:如何将结构数组转换为从结构中提取的值数组?

Core Data 中关系的默认值