Symfony 2学说离开了加入

时间:2014-12-21 15:49:07

标签: symfony doctrine-orm

我有查询

    $em = $this->getDoctrine()->getManager();
    $query = $em->createQueryBuilder();

    $query = $em->createQueryBuilder()
        ->select('com', 'cit')
        ->from('CatalogWebBundle:ComCompany', 'com')
        ->leftJoin('com.cmpCity', 'cit')
        ->getQuery()
        ->setMaxResults(1);

    $info = $query->getResult();

工作正常,但我不知道如何从JOINED TABLE获得结果。我尝试使用JOINED表ENTITIES中的get方法,但它不起作用?

也许我需要向ENTITIES广告?

class ComCity
{
    /**
     * @var integer
     *
     * @ORM\Column(name="cit_id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $citId;

    /**
     * @var string
     *
     * @ORM\Column(name="cit_name", type="string", length=255, nullable=true)
     */
    private $citName;



    /**
     * Get citId
     *
     * @return integer 
     */
    public function getCitId()
    {
        return $this->citId;
    }

    /**
     * Set citName
     *
     * @param string $citName
     * @return ComCity
     */
    public function setCitName($citName)
    {
        $this->citName = $citName;

        return $this;
    }

    /**
     * Get citName
     *
     * @return string 
     */
    public function getCitName()
    {
        return $this->citName;
    }
}

命名空间Catalog \ WebBundle \ Entity;

将Doctrine \ ORM \ Mapping用作ORM;

class ComCompany
{
    /**
     * @var integer
     *
     * @ORM\Column(name="cmp_id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $cmpId;

    /**
     * @var string
     *
     * @ORM\Column(name="cmp_name", type="string", length=255, nullable=true)
     */
    private $cmpName;

    /**
     * @var integer
     *
     * @ORM\Column(name="cmp_code", type="bigint", nullable=true)
     */
    private $cmpCode;

    /**
     * @var string
     *
     * @ORM\Column(name="cmp_vat", type="string", length=255, nullable=true)
     */
    private $cmpVat;

    /**
     * @var integer
     *
     * @ORM\Column(name="cmp_emp", type="integer", nullable=true)
     */
    private $cmpEmp;

    /**
     * @var string
     *
     * @ORM\Column(name="cmp_return", type="string", length=255, nullable=true)
     */
    private $cmpReturn;

    /**
     * @var string
     *
     * @ORM\Column(name="cmp_return_from", type="string", length=255, nullable=true)
     */
    private $cmpReturnFrom;

    /**
     * @var string
     *
     * @ORM\Column(name="cmp_return_till", type="string", length=255, nullable=true)
     */
    private $cmpReturnTill;

    /**
     * @var string
     *
     * @ORM\Column(name="cmp_address", type="string", length=255, nullable=true)
     */
    private $cmpAddress;

    /**
     * @var integer
     *
     * @ORM\Column(name="cmp_phone", type="bigint", nullable=true)
     */
    private $cmpPhone;

    /**
     * @var string
     *
     * @ORM\Column(name="cmp_email", type="string", length=255, nullable=true)
     */
    private $cmpEmail;

    /**
     * @var string
     *
     * @ORM\Column(name="cmp_site", type="string", length=255, nullable=true)
     */
    private $cmpSite;

    /**
     * @var string
     *
     * @ORM\Column(name="cmp_ceo", type="string", length=255, nullable=true)
     */
    private $cmpCeo;

    /**
     * @var string
     *
     * @ORM\Column(name="cmp_register", type="string", length=255, nullable=true)
     */
    private $cmpRegister;

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

    /**
     * @var \Catalog\WebBundle\Entity\ComCategory
     *
     * @ORM\ManyToOne(targetEntity="Catalog\WebBundle\Entity\ComCategory")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="cmp_category", referencedColumnName="cat_id")
     * })
     */
    private $cmpCategory;

    /**
     * @var \Catalog\WebBundle\Entity\ComCity
     *
     * @ORM\ManyToOne(targetEntity="Catalog\WebBundle\Entity\ComCity")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="cmp_city", referencedColumnName="cit_id")
     * })
     */
    private $cmpCity;



    /**
     * Get cmpId
     *
     * @return integer 
     */
    public function getCmpId()
    {
        return $this->cmpId;
    }

    /**
     * Set cmpName
     *
     * @param string $cmpName
     * @return ComCompany
     */
    public function setCmpName($cmpName)
    {
        $this->cmpName = $cmpName;

        return $this;
    }

    /**
     * Get cmpName
     *
     * @return string 
     */
    public function getCmpName()
    {
        return $this->cmpName;
    }

    /**
     * Set cmpCode
     *
     * @param integer $cmpCode
     * @return ComCompany
     */
    public function setCmpCode($cmpCode)
    {
        $this->cmpCode = $cmpCode;

        return $this;
    }

    /**
     * Get cmpCode
     *
     * @return integer 
     */
    public function getCmpCode()
    {
        return $this->cmpCode;
    }

    /**
     * Set cmpVat
     *
     * @param string $cmpVat
     * @return ComCompany
     */
    public function setCmpVat($cmpVat)
    {
        $this->cmpVat = $cmpVat;

        return $this;
    }

    /**
     * Get cmpVat
     *
     * @return string 
     */
    public function getCmpVat()
    {
        return $this->cmpVat;
    }

    /**
     * Set cmpEmp
     *
     * @param integer $cmpEmp
     * @return ComCompany
     */
    public function setCmpEmp($cmpEmp)
    {
        $this->cmpEmp = $cmpEmp;

        return $this;
    }

    /**
     * Get cmpEmp
     *
     * @return integer 
     */
    public function getCmpEmp()
    {
        return $this->cmpEmp;
    }

    /**
     * Set cmpReturn
     *
     * @param string $cmpReturn
     * @return ComCompany
     */
    public function setCmpReturn($cmpReturn)
    {
        $this->cmpReturn = $cmpReturn;

        return $this;
    }

    /**
     * Get cmpReturn
     *
     * @return string 
     */
    public function getCmpReturn()
    {
        return $this->cmpReturn;
    }

    /**
     * Set cmpReturnFrom
     *
     * @param string $cmpReturnFrom
     * @return ComCompany
     */
    public function setCmpReturnFrom($cmpReturnFrom)
    {
        $this->cmpReturnFrom = $cmpReturnFrom;

        return $this;
    }

    /**
     * Get cmpReturnFrom
     *
     * @return string 
     */
    public function getCmpReturnFrom()
    {
        return $this->cmpReturnFrom;
    }

    /**
     * Set cmpReturnTill
     *
     * @param string $cmpReturnTill
     * @return ComCompany
     */
    public function setCmpReturnTill($cmpReturnTill)
    {
        $this->cmpReturnTill = $cmpReturnTill;

        return $this;
    }

    /**
     * Get cmpReturnTill
     *
     * @return string 
     */
    public function getCmpReturnTill()
    {
        return $this->cmpReturnTill;
    }

    /**
     * Set cmpAddress
     *
     * @param string $cmpAddress
     * @return ComCompany
     */
    public function setCmpAddress($cmpAddress)
    {
        $this->cmpAddress = $cmpAddress;

        return $this;
    }

    /**
     * Get cmpAddress
     *
     * @return string 
     */
    public function getCmpAddress()
    {
        return $this->cmpAddress;
    }

    /**
     * Set cmpPhone
     *
     * @param integer $cmpPhone
     * @return ComCompany
     */
    public function setCmpPhone($cmpPhone)
    {
        $this->cmpPhone = $cmpPhone;

        return $this;
    }

    /**
     * Get cmpPhone
     *
     * @return integer 
     */
    public function getCmpPhone()
    {
        return $this->cmpPhone;
    }

    /**
     * Set cmpEmail
     *
     * @param string $cmpEmail
     * @return ComCompany
     */
    public function setCmpEmail($cmpEmail)
    {
        $this->cmpEmail = $cmpEmail;

        return $this;
    }

    /**
     * Get cmpEmail
     *
     * @return string 
     */
    public function getCmpEmail()
    {
        return $this->cmpEmail;
    }

    /**
     * Set cmpSite
     *
     * @param string $cmpSite
     * @return ComCompany
     */
    public function setCmpSite($cmpSite)
    {
        $this->cmpSite = $cmpSite;

        return $this;
    }

    /**
     * Get cmpSite
     *
     * @return string 
     */
    public function getCmpSite()
    {
        return $this->cmpSite;
    }

    /**
     * Set cmpCeo
     *
     * @param string $cmpCeo
     * @return ComCompany
     */
    public function setCmpCeo($cmpCeo)
    {
        $this->cmpCeo = $cmpCeo;

        return $this;
    }

    /**
     * Get cmpCeo
     *
     * @return string 
     */
    public function getCmpCeo()
    {
        return $this->cmpCeo;
    }

    /**
     * Set cmpRegister
     *
     * @param string $cmpRegister
     * @return ComCompany
     */
    public function setCmpRegister($cmpRegister)
    {
        $this->cmpRegister = $cmpRegister;

        return $this;
    }

    /**
     * Get cmpRegister
     *
     * @return string 
     */
    public function getCmpRegister()
    {
        return $this->cmpRegister;
    }

    /**
     * Set cmpUrl
     *
     * @param string $cmpUrl
     * @return ComCompany
     */
    public function setCmpUrl($cmpUrl)
    {
        $this->cmpUrl = $cmpUrl;

        return $this;
    }

    /**
     * Get cmpUrl
     *
     * @return string 
     */
    public function getCmpUrl()
    {
        return $this->cmpUrl;
    }

    /**
     * Set cmpCategory
     *
     * @param \Catalog\WebBundle\Entity\ComCategory $cmpCategory
     * @return ComCompany
     */
    public function setCmpCategory(\Catalog\WebBundle\Entity\ComCategory $cmpCategory = null)
    {
        $this->cmpCategory = $cmpCategory;

        return $this;
    }

    /**
     * Get cmpCategory
     *
     * @return \Catalog\WebBundle\Entity\ComCategory 
     */
    public function getCmpCategory()
    {
        return $this->cmpCategory;
    }

    /**
     * Set cmpCity
     *
     * @param \Catalog\WebBundle\Entity\ComCity $cmpCity
     * @return ComCompany
     */
    public function setCmpCity(\Catalog\WebBundle\Entity\ComCity $cmpCity = null)
    {
        $this->cmpCity = $cmpCity;

        return $this;
    }

    /**
     * Get cmpCity
     *
     * @return \Catalog\WebBundle\Entity\ComCity 
     */
    public function getCmpCity()
    {
        return $this->cmpCity;
    }
}

2 个答案:

答案 0 :(得分:2)

getResult()将整个结果集作为可迭代数组集合返回,单个结果。因此,当您使用setMaxResults(1)时,最好使用getSingleResult()获取单个结果:

$info = $query->getSingleResult();

如果未返回任何结果,则$info将为null。否则,您将能够使用以下方式访问cmpCity属性:

$cmpCity = $info->getCmpCity();

如果没有与$cmpCity对象关联的nullcmpCity将再次为ComCompany。如果您想获取所做的第一个ComCompany对象有关联的cmpCity,请使用innerJoin代替leftJoin

$query = $em->createQueryBuilder()
    ->select('com', 'cit')
    ->from('CatalogWebBundle:ComCompany', 'com')
    ->innerJoin('com.cmpCity', 'cit')
    ->getQuery()
    ->setMaxResults(1);

$info = $query->getSingleResult();
$cmpCity = $info->getCmpCity();

答案 1 :(得分:1)

当你将leftJoin和setMaxResults组合在一起时,这可能与issue有关。

您已经有了如何进行查询的答案:https://stackoverflow.com/a/14886847/3726645