symfony2 doctrine manytoone relationship

时间:2014-07-23 20:13:12

标签: php symfony doctrine-orm

我相信我的问题必须有一个简单的解决方案,但我无法解决这个问题,而且我不确定原因。

方案: 我有两个实体:自行车和评论,关系是OneToMany:

/**
 * Bike
 *
 * @ORM\Entity(repositoryClass="BikeRepository")
 * @ORM\HasLifecycleCallbacks
 * @ORM\Table(name="bike")
 */
class Bike
{
...
    /**
     * @var string
     *
     * @ORM\OneToMany(targetEntity="Review", mappedBy="bike", cascade={"persist"}, fetch="EXTRA_LAZY")
     */
    private $reviews;
...
}

/**
 * Review
 *
 * @ORM\Entity(repositoryClass="ReviewRepository")
 * @ORM\Table(name="review")
 * @ORM\HasLifecycleCallbacks()
 */
class Review
{
    ...

    /**
     * @var integer
     *
     * @ORM\ManyToOne(targetEntity="Bike", inversedBy="reviews", fetch="EXTRA_LAZY")
     * @ORM\JoinColumn(name="bike_id", referencedColumnName="id")
     */
    private $bike;
    ....
}  

getter和setter已由学说生成。

在前端,我有一个表单,其中自行车是隐藏字段,因为有一个带有ajax请求的自动填充字段。所以在控制器中如果$ form-> isValid()我从隐藏字段中获取自行车ID,搜索该自行车的数据库并设置自行车如下:

if ($form->isValid()) {
    if ($bikeId) {
        $bike = $this->em->getRepository('BikeBundle:Bike')->findOneBy(array('id' => $bikeId));
        $review->setBike($bike);
    }
    $this->em->persist($review);
    $this->em->flush();
}  

这总是在数据库中为bike_id提供NULL。知道什么可能是错的吗?我试图在坚持之前抛弃$ review,我可以得到自行车的详细信息,所以我不知道出了什么问题。在实体setBike()方法中,我可以获取该Bike对象的任何值,除了getId()返回NULL。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

  1. 您不需要保留现有实体,因此您可以像

    一样保存您的实体
      

    $审查 - > setBike($自行车);       $这 - > EM->冲洗();

  2. 尝试检查doctrine是否真的返回任何实体..我担心如果它不返回Bike实体

  3. UPD:还尝试检查Bike Entity类的命名空间。在你的情况下似乎是错误的,因为它通常看起来像“AcmeBikeBundle:Bike”