gpt4 book ai didi

doctrine-orm - Doctrine - 如何将结果及其关系提取为数组

转载 作者:行者123 更新时间:2023-12-05 01:23:41 25 4
gpt4 key购买 nike

我有一个实体,称为 Stones,Stones 与 Attributes 有 ManyToMany 关系。

所以我查询实体以获取石头,然后将其水化以将其转换为数组。

    $result =  $this->stoneRepository->find($stone_id);

if ( ! $result )
{
return false;
}

$resultArray = $this->doctrineHydrator->extract($result);

这适用于 Stone 实体,但是我注意到连接(属性)仍然是对象。
array (size=12)
'id' => int 1
'name' => string 'Agate' (length=5)
'title' => string 'Title' (length=5)
'attribute' =>
array (size=5)
0 =>
object(Stone\Entity\StAttribute)[1935]
private 'id' => int 2
private 'name' => string 'Hay fevor' (length=9)
private 'state' => boolean true
private 'created' => null
private 'modified' => null
1 =>
object(Stone\Entity\StAttribute)[1936]
private 'id' => int 15
private 'name' => string 'Libra' (length=5)
private 'state' => boolean true
private 'created' => null
private 'modified' => null
2 =>

等等。

对 Attribute 对象进行水合的过程是什么?

最佳答案

Hydration 使用与提取相反的数组填充对象(实体)。

由于您想要数组格式的结果集,您应该防止在引擎盖下的 ORM 级别中已经发生的不必要的水化和提取过程。

尝试使用 Query Builder Api而不是内置 find()实体存储库的方法。这不是单行而是非常简单和快速的解决方案,它应该可以工作:

$qb = $this->stoneRepository->createQueryBuilder('S');
$query = $qb->addSelect('A')
->leftJoin('S.attribute', 'A')
->where('S.id = :sid')
->setParameter('sid', (int) $stone_id)
->getQuery();

$resultArray = $query->getOneOrNullResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);

这样,您还将防止对数据库运行其他 SQL 查询以获取关联实体。 (StAttribute 在你的情况下)

关于doctrine-orm - Doctrine - 如何将结果及其关系提取为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27572139/

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