symfony 学说 QueryBuilder 到数组结果

nic*_*ram 2 doctrine query-builder symfony

我想从学说查询中获取数组。\n我有自引用实体

\n\n

应用程序\实体\访问模块

\n\n
/**\n * @ORM\\ManyToOne(targetEntity="App\\Entity\\AccessModule", inversedBy="children")\n * @ORM\\JoinColumn(name="parent_id", referencedColumnName="id", nullable=true)\n */\nprivate $parent;\n\n/**\n * @ORM\\OneToMany(targetEntity="App\\Entity\\AccessModule", mappedBy="parent", fetch="EAGER")\n * @Serializer\\MaxDepth(2)\n */\nprivate $children;\n\n\n/**\n * AccessModule constructor.\n */\npublic function __construct()\n{\n    $this->children = new ArrayCollection();\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

在这个存储库中

\n\n

应用程序\\实体\\AccessModuleRepository

\n\n
 public function findAllArray()\n{\n    return $this->createQueryBuilder(\'a\')\n        ->getQuery()\n        ->getResult();\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这返回具有子级和父级的对象的集合。但是,当我想将此查询作为数组获取时,->getArrayResult()我仅获取包含“id”和“name”的数组,而没有子数组“children”和“parent”。

\n\n

返回 $this->createQueryBuilder(\'a\')->getQuery()->getArrayResult();

\n\n
array:3 [\xe2\x96\xbc\n 0 => array:2 [\xe2\x96\xbc\n   "id" => 2\n   "name" => "Common module"\n  ]\n  1 => array:2 [\xe2\x96\xbc\n    "id" => 3\n    "name" => "User Module"\n ]\n 2 => array:2 [\xe2\x96\xbc\n    "id" => 4\n    "name" => "Admin Module"\n  ]\n]\n
Run Code Online (Sandbox Code Playgroud)\n\n

返回 $this->createQueryBuilder(\'a\')->getQuery()->getResult();

\n\n
  array:3 [\xe2\x96\xbc\n  0 => AccessModule {#5118 \xe2\x96\xbc\n    -id: 2\n    -name: "Common module"\n    -parent: null\n    -children: PersistentCollection {#5208 \xe2\x96\xbc\n      -snapshot: array:2 [ \xe2\x80\xa62]\n      -owner: AccessModule {#5118}\n      -association: array:15 [ \xe2\x80\xa615]\n      -em: EntityManager {#2624 \xe2\x80\xa611}\n      -backRefFieldName: "parent"\n      -typeClass: ClassMetadata {#3093 \xe2\x80\xa6}\n      -isDirty: false\n      #collection: ArrayCollection {#5209 \xe2\x96\xbc\n        -elements: array:2 [\xe2\x96\xbc\n          0 => AccessModule {#5325 \xe2\x96\xbc\n            -id: 3\n            -name: "User Module"\n            -parent: AccessModule {#5118}\n            -children: PersistentCollection {#5327 \xe2\x96\xb6}\n          }\n          1 => AccessModule {#5328 \xe2\x96\xbc\n            -id: 4\n            -name: "Admin Module"\n            -parent: AccessModule {#5118}\n            -children: PersistentCollection {#5330 \xe2\x96\xb6}\n          }\n        ]\n      }\n      #initialized: true\n    }\n  }\n  1 => AccessModule {#5325 \xe2\x96\xb6}\n  2 => AccessModule {#5328 \xe2\x96\xb6}\n]\n
Run Code Online (Sandbox Code Playgroud)\n\n

如何通过引用对象从 getResult() 获取数组?

\n\n

预期结果

\n\n
[\n [0] => [\n    \'id\' => 1,\n    \'name\' => \'Common Module\',\n    \'parent\' => null,\n    \'children => [\n        [0] => [\n            \'id\' => 2,\n            \'name\' => \'User Module\',\n            \'parent\' => 1,\n            \'children\' => []\n            ],\n        [1] => [\n            \'id\' => 3,\n            \'name\' => \'Admin Module\',\n            \'parent\' => 1,\n            \'children\' => []\n            ]\n        ]\n    ],\n [1] => [\n    \'id\' => 2,\n    \'name\' => \'User Module\',\n    \'parent\' => 1,\n    \'children\' => []\n    ],\n [2] => [\n    \'id\' => 3,\n    \'name\' => \'Admin Module\',\n    \'parent\' => 1,\n    \'children\' => []\n    ]\n]\n
Run Code Online (Sandbox Code Playgroud)\n

小智 5

您可以使用可选参数调用 getResult 方法:

return $this->createQueryBuilder('a')
    ->getQuery()
    ->getResult(Query::HYDRATE_ARRAY);
Run Code Online (Sandbox Code Playgroud)

  • 此平面数组不会添加实体中的子级和父级。`getArrayResult()` 是 `getResult(Query::HYDRATE_ARRAY)` 的别名 (2认同)