1

クエリビルダーの結果を連想配列に変換する方法を探しています。しかし、私が必要としているのは、別のテーブルからの関係データを含めることです。getArrayResult() メソッドを使用すると、配列が返されますが、外部キーはありません。そして、連想データベーステーブルのデータを含むネストされた配列に含まれる外部キーが必要です。 編集: ここに私のコードがあります:

$qb = $this->_em->createQueryBuilder();
$qb->select('p');
$qb->from('XXX\MyBundle\Entity\Entity1', 'p');

$qb->leftJoin('p.FK1','u');
$qb->andWhere('u.Attr1 = :attr1');
$qb->setParameter('attr1', $appId);
$qb->andWhere('u.Attr2 IS NULL');
$qb->leftJoin('u.FK2', 'v');
$qb->andWhere('v.Attr3 = :attr3');
$qb->andWhere('v.Attr4 IS NULL');
$qb->setParameter('attr3', $userId);


$result = $qb->getQuery()->getArrayResult();

SOAP のため、この変換が必要です。複雑なオブジェクトを、エンティティのネストされたオブジェクトとして返すことができませんでした。

4

1 に答える 1

2

まず、この関数を Entity1Repository.php に記述する必要があります。

createQueryBuilder() メソッドを使用しているため、select および from メソッドを使用する必要はありません。あなたの例では、結合を書いていますが、クエリにそれらの結合を返すように要求していません。

このコードを試してください:

<?php

namespace XXX\\MyBundle\Entity;

use Doctrine\ORM\EntityRepository;

class Entity1Repository extends EntityRepository
{
    public function getEntityWithJoins()
    {
        return $this
            ->createQueryBuilder('p')
            ->addSelect('u')
            ->addSelect('v')
            ->leftJoin('p.FK1','u')
            ->andWhere('u.Attr1 = :attr1')
            ->setParameter('attr1', $appId)
            ->andWhere('u.Attr2 IS NULL')
            ->leftJoin('u.FK2', 'v')
            ->andWhere('v.Attr3 = :attr3')
            ->andWhere('v.Attr4 IS NULL')
            ->setParameter('attr3', $userId);
            ->getQuery()
            ->getArrayResult();
    }
}
于 2013-03-17T14:24:57.417 に答える