Doctrine2在Zend2中多次加载

时间:2014-03-19 09:11:36

标签: php doctrine-orm zend-framework2

我有两个实体:

namespace Api\Payment\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * PaySystemField
 *
 * @ORM\Table(name="paysystem_field")
 * @ORM\Entity
 */
class PaySystemField
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=50, nullable=false)
     */
    private $name;

    ...

}

namespace Api\Payment\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * PaySystemFieldValue
 *
 * @ORM\Table(name="paysystem_field_value")
 * @ORM\Entity
 */
class PaySystemFieldValue
{
    ...

    /**
     * @var \Api\Payment\Entity\PaySystemField
     *
     * @ORM\ManyToOne(targetEntity="\Api\Payment\Entity\PaySystemField", fetch="EAGER")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="paySystemFieldId", referencedColumnName="id")
     * })
     */
    private $paySystemField;

    ...

}

我的DQL请求:

$fieldsValues = $this->objectManager
            ->createQuery('
                SELECT psfv,psf FROM Api\Payment\Entity\PaySystemFieldValue psfv
                JOIN Api\Payment\Entity\PaySystemField psf WITH (psfv.paySystemField=psf.id)
                WHERE psfv.payment=:payment
            ')
            ->setParameter('payment', $this->payment)
            ->setFetchMode('Api\Payment\Entity\PaySystemFieldValue', 'paySystemField', 'EAGER')
            ->getResult();

此查询返回PaySystemFieldValue,其中paySystemField关系已初始化,但$ fieldsValues包含PaySystemFieldValue实体和PaySystemField。我怎么能这样做$ fieldsValues只包含PaySystemFieldValue实体,并初始化了paySystemField关系?

1 个答案:

答案 0 :(得分:1)

尝试使用此查询:

$fieldsValues = $this->objectManager->createQuery('SELECT psfv FROM Api\Payment\Entity\PaySystemFieldValue psfv WHERE psfv.payment=:payment')->setParameter('payment', $this->payment)->getResult();

$this->getServiceLocator()->get('doctrine.entitymanager.orm_default')->getRepository("Api\Payment\Entity\PaySystemFieldValue")->findBy(array('payment' => $this->payment));