这是一个困扰我一段时间的小问题,因为我仍然没有完全掌握实体之间的关系,尽管我进行了大量研究,但我无法解决它......
我有一个实体" Activite"其中我与实体有一个OneToOne关系" ActiviteImage"知道活动不一定与图片相关联:
class Activite
{
....
/**
* @ORM\OneToOne(targetEntity="ISC\PlatformBundle\Entity\ActiviteImage", cascade={"persist", "remove"})
*/
private $image;
....
/**
* Set image
*
* @param \ISC\PlatformBundle\Entity\ActiviteImage $image
* @return Activite
*/
public function setImage(ActiviteImage $image = null)
{
$this->image = $image;
return $this;
}
/**
* Get image
*
* @return \ISC\PlatformBundle\Entity\ActiviteImage
*/
public function getImage()
{
return $this->image;
}
}

class ActiviteImage
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="urlImage", type="string", length=255)
*/
private $urlImage;
}

提交表单时
我的控制器:
$activite->setTextActivity($contentActu);
$activite->setIdFriend(0);
$activite->setDatetimeActivity(new \DateTime());
$image = new ActiviteImage();
$image->setUrlImage('http://127.0.0.1:81/IMC/web/uploads/img/'.$fileName);
$activite->setImage($image);
$em->persist($activite);
$em->flush();

不要依赖普通地址,这些只是现在的测试。
添加两个实体数据库的工作原理只有当我手动检查我的Activity表中的操作时,image_id列是空的,它不是NULL,只是空(所以没有与ActiviteImage连接的表)....
(如果它对你有帮助,我知道我们不应该直接触摸到桌面,但是我试着告诉图像的id,phpMyAdmin不会返回错误,只是" 0在线发布" cf. image - > http://imageshack.com/a/img923/3784/tSiY9d.png)
当我去观看Symfony执行的应用程序时可能有用的其他信息我认为自己很好:
INSERT INTO activite (idUser, idTypeActivite, idFriend, textActivity, datetimeActivity, image_id) VALUES (?, ?, ?, ?, ?, ?)
Parameters: { 1: 1, 2: 2, 3: 0, 4: fghgfh, 5: '2016-09-07 16:30:13', 6: 1 }

我多次回到Wincou关于Openclassroom的教程,认为我错过了一些东西,但如果是这样的话,我看不出是什么......
所以,如果你有一个小轨道给我这个问题仍然存在并且相对麻烦:呃:
(不容易理解关系...... :()
提前致谢,
凯
答案 0 :(得分:0)
ActiviteImage的OneToOne关系在哪里 - >业务范围?
我会将关系设置为双向关系,例如你应该在你的关系中使用mappedBy和inversedBy。
请参阅documentation。
E.g。
class Activite
{
// ...
/**
* @ORM\OneToOne(targetEntity="ActiviteImage", mappedBy="activite", cascade={"persist", "remove"})
*/
private $activiteImage;
// ...
}
/** @Entity */
class ActiviteImage
{
// ...
/**
* @ORM\OneToOne(targetEntity="Activite", inversedBy="activiteImage")
* @ORM\JoinColumn(name="activite_id", referencedColumnName="id")
*/
private $activite;
// ...
}
正确设置关系后它应该可以正常工作。