Zend Framework 2:Doctrine 2 Query Builder读取表,具有多对一关系

时间:2014-10-16 21:37:21

标签: doctrine-orm query-builder

我有一个非常简单的数据库表来存储广告。请注意,下面是我的文件的简短形式,我离开了附加字段。

广告表

  • ID
  • advert_title
  • advert_text
  • advert_user_id

我创建了一个广告实体:

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

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


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

/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="adverts")
* @ORM\JoinColumn(name="advert_user_id", referencedColumnName="id")
*/
private $user;

    /** 
 * Set user 
 * 
 * @param \Advert\Entity\User $user 
 * @return Advert 
 */ 
public function setUser(\Advert\Entity\User $user = null) 
{ 
    $this->user = $user; 

    return $this; 
} 

/** 
 * Get user 
 * 
 * @return \Advert\Entity\User 
 */ 
public function getUser() 
{ 
    return $this->user; 
}

我现在正在尝试用特定的用户ID读出所有广告。这很简单:

Select * From advert Where advert_user_id = '10'

因此,我使用以下查询创建了一个Repository文件。

public function findAdvertsByUser($userID)
{

    $userID = 18; // static for testing

    $query = $this->_em->getRepository($this->getEntityName())->createQueryBuilder('a')
        ->where('a.user=:userid' )
        ->setParameter('userid', $userID)
        ->getQuery()->getResult();

// Below to check query and parameters used:    
    $sql=$query->getSQL();
    $parameters=$query->getParameters();
    echo $parameters;  

网站崩溃,我检查了用户ID的参数是什么结果: Doctrine \ Common \ Collections \ ArrayCollection @ 000000004a00fe4400000000f5af5615

我太初衷了解这里出了什么问题。有人可以帮忙并给我一个提示吗?非常感谢你提前。

1 个答案:

答案 0 :(得分:0)

您忘记在注释中编写实体的完整路径

* @ORM\ManyToOne(targetEntity="User", inversedBy="adverts")

固定:

* @ORM\ManyToOne(targetEntity="\Advert\Entity\User", inversedBy="adverts")