当前位置: 首页 > 知识库问答 >
问题:

计算Laravel Eloquent中所有根父级的所有第n个子级的数量

支劲
2023-03-14

我有一个从拉威尔收集的雄辩的问题。这里祖父有很多孩子(父亲),父亲有很多孩子(孙子)。返回的结果如下:

    [
  {
    "grand_father_id": "26",
    "fathers": [
      {
        "father_id": "101",
        "children": [
          {
            "child_id": "77",
            "children_weight": [
              {
                "weight": "30.00",
              }
            ]
          },
          {
            "child_id": "84",
            "children_weight": [
              {
                "weight": "20.00",
              }
            ]
          }
        ]
      },
      {
        "father_id": "102",
        "children": [
          {
            "child_id": "78",
            "children_weight": [
              {
                "weight": "50.00",
              }
            ]
          }
        ]
      }
    ]
  },
  {
    "grand_father_id": "27",
    "fathers": [
      {
        "father_id": "100",
        "children": [
          {
            "child_id": "83",
            "children_weight": [
              {
                "weight": "100.00",
              }
            ]
          }
        ]
      }
    ]
  },
  {
    "grand_father_id": "28",
    "fathers": [
      {
        "father_id": "105",
        "children": [
          {
            "child_id": "81",
            "children_weight": [
              {
                "weight": "80.00",
              }
            ]
          },
          {
            "child_id": "82",
            "children_weight": [
              {
                "weight": "0.00",
              }
            ]
          }
        ]
      }
    ]
  },
  {
    "grand_father_id": "29",
    "fathers": [
      {
        "father_id": "108",
        "children": [
          {
            "child_id": "79",
            "children_weight": [
              {
                "weight": "44.00",
              }
            ]
          },
          {
            "child_id": "80",
            "children_weight": [
              {
                "weight": "56.00",
              }
            ]
          }
        ]
      }
    ]
  },
  {
    "grand_father_id": "30",
    "fathers": [
      {
        "father_id": "107",
        "children": [

        ]
      }
    ]
  }
]

我如何计算所有祖父的所有孙子的总数。我当然可以使用嵌套循环来计算这个。但是有没有其他Laravel集合方法可以做到这一点?顺便说一下,我在这里举的祖父、父亲、孙子的例子只是一个假名的例子。真正的字段是目标操作success_indicatorssuccess_indicator_weight。获取集合的查询为:

return Objective::with([
        'actions' => function($query) {
        $query->select(['action_id', 'action_description', 'objective_id_fk']);
    }, 'actions.successIndicators' => function($query) {
        $query->select('success_indicator_id', 'success_indicator_description', 'action_id_fk');
    }, 'actions.successIndicators.SuccessIndicatorYearWeight' => function($query) {
        $query->select('success_indicator_weight', 'success_indicator_unit', 'success_indicator_id_fk');
    },
])->get()

共有1个答案

姬振濂
2023-03-14

在嵌套数组上执行各种操作的array_*助手方法有很多,但我不认为有任何方法可以为您的事业服务。你可以自己检查-http://laravel.com/docs/5.0/helpers#arrays

我不知道自己是否有任何内置的集合,但是你可以考虑每个祖父类的访问器方法

class Grandfather extends Eloquent
{
    ...
    public function getTotalGrandchildrenAttribute()
    {
        $total_grandchildren = 0;
        // loop through each father
        foreach ($this->fathers as $father) {
            $total_grandchildren += count($father->children);
        }
        return $total_grandchildren;
    }
}

然后在你的剧本中:

$grandfathers = Grandfathers::all();

$total_grandchildren = 0;
foreach ($grandfathers as $grandfather) {
    $total_grandchildren += $grandfather->total_grandchildren;
}

echo "Total grandchildren: $total_grandchildren";

http://laravel.com/docs/5.0/eloquent#accessors-和突变子

此外,您可能希望将用于('父亲'),并将用于('儿童'),而不是如上所示使用all(),这样您就不会在每次要获取父亲/儿童时都点击DB:

$grandfathers = Grandfathers::with(array('fathers' => function($query) {
    $query->with('children');
});

http://laravel.com/docs/5.0/eloquent#eager-装载

 类似资料:
  • 问题内容: 假设我有两个表,“父母”和“孩子”。父子关系是一个多对多关系,可通过标准的交叉引用表来实现。 我想查找使用SQL(特别是MS SQL Server的T-SQL; 2005语法可以接受)的给定子集的所有成员所引用的所有Parent记录。 例如,假设我有: List item Parent Alice Parent Bob Child Charlie references Alice, B

  • 问题内容: 在Firebase的数据库中,我需要更新open的值并将其传递给 所有子级的false。我如何用Java语言做到这一点?像这样 问题答案: Firebase数据库没有与SQL等效的数据库UPDATE messages SET open=false。 要更新Firebase中的节点,您必须首先具有对该特定节点的引用。为了获得对节点的引用,您必须知道该 节点的完整路径。 这意味着您首先需要

  • 问题内容: 我有一个带有多个子SKSpriteNode的SKNode。一个简化的例子: 我想对所有这些孩子采取行动。当我在上执行操作时,没有任何效果。 我不能在父项上使用,因为它的许多子项已经具有我正在使用的名称。 有没有一种方法可以遍历的所有子项,以便对所有子项执行单个操作? 问题答案: 您可以简单地列举: 如有必要,请检查每个孩子是否确实是: 从 Swift 2(Xcode 7)开始, 可以将

  • 问题内容: 我父母的渲染中有以下代码 以及下面我孩子图表中的代码 我以为仅在所有子项都加载后才调用父级的componentDidMount。但是在这里,父级的componentDidMount在子级的componentDidMount之前被调用。 这是工作方式吗?还是我做错了什么。 如果这是工作方式,我如何检测从父级加载所有子级组件的时间? 问题答案: 是的,孩子的称为父母之前的。 运行下面的代码

  • 问题内容: SQL开发人员,我有一个计划不周的数据库作为任务,以学习有关SQL Server 2012的很多知识。 所以,有表: 更新该行后,我需要检查element的父键,以不允许element自anny之类。 当我删除该行时,我需要删除所有孩子以及孩子的孩子,等等。 问题是: 如何选择DIST的一个元素的所有“父母+祖父母+等等”? 我如何选择DIST元素中的所有“儿子+孙子+等”? 我读过有

  • 本文向大家介绍如何使用jQuery从父级删除所有子级节点?,包括了如何使用jQuery从父级删除所有子级节点?的使用技巧和注意事项,需要的朋友参考一下 要从父级删除所有子节点,请使用方法。该方法从匹配的元素集中删除所有子节点。 示例 您可以尝试运行以下代码以了解如何从父级删除所有子节点-