我相信我的问题必须有一个简单的解决方案,但我无法解决这个问题,而且我不确定原因。
方案: 我有两个实体:自行车和评论,关系是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。
感谢您的帮助。
答案 0 :(得分:0)
您不需要保留现有实体,因此您可以像
一样保存您的实体$审查 - > setBike($自行车); $这 - > EM->冲洗();
尝试检查doctrine是否真的返回任何实体..我担心如果它不返回Bike实体
UPD:还尝试检查Bike Entity类的命名空间。在你的情况下似乎是错误的,因为它通常看起来像“AcmeBikeBundle:Bike”