我相信一定有一个简单的解决方案来解决我的问题,但我不能让它工作,我不知道为什么。
场景:我有2个实体:自行车和审查,关系是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已经由doctrine生成。
在前端,我有一个表单,其中自行车是作为一个隐藏的字段,因为有一个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。你知道哪里出错了吗?我试过在坚持之前转储$评论,我可以得到自行车的细节,所以我不知道出了什么问题。在实体setBike()方法中,我可以获得该Bike对象的任何值,除了getId()返回NULL。
谢谢你的帮助
-
你不需要保存一个已经存在的实体,所以你只需要像
那样保存你的实体评审-> setBike(自行车);$ this -> em>冲洗();
-
尝试检查学说是否真的返回任何实体。我担心如果它不返回Bike实体
UPD:也尝试检查Bike Entity类的命名空间。这似乎是错误的,在你的情况下,因为通常它看起来像"AcmeBikeBundle:Bike"