Symfony2关系错误OneToOne单向

时间:2016-09-07 21:32:24

标签: symfony doctrine-orm doctrine symfony-2.7

这是一个困扰我一段时间的小问题,因为我仍然没有完全掌握实体之间的关系,尽管我进行了大量研究,但我无法解决它......

我有一个实体" 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的教程,认为我错过了一些东西,但如果是这样的话,我看不出是什么......

所以,如果你有一个小轨道给我这个问题仍然存在并且相对麻烦:呃:

(不容易理解关系...... :()

提前致谢,

1 个答案:

答案 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;

    // ...
}

正确设置关系后它应该可以正常工作。