学说ORM不会保持关系

时间:2013-07-23 13:56:26

标签: php doctrine

我有一个问题,坚持与学说的关系。

这是我正在做的过程:

  1. 创建材质对象&填写数据
  2. 创建PossibleMaterialConfiguration对象&填写数据
  3. 使用

    将PossibleMaterialConfiguration对象分配给Material Object

    $材料 - > addPossibleMaterialConfiguration($ possibleMaterialConfiguration);

  4. 结果: PossibleMaterialConfiguration.material_id为空!

    但是,当我以相反的方式进行操作并将Material Object分配给PossibleMaterialConfiguration时,它确实有效!

    我开车疯了!这到底是怎么回事?提前谢谢。

    我的两个实体:

    Material.php

    /**
     * Material
     *
     * @ORM\Table()
     * @ORM\Entity
     */
    class Material
    {
        /**
         * @var integer
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
    
        /**
         * @var string
         *
         * @ORM\Column(name="name", type="string", length=255)
         */
        private $name;
    
        /**
         * @ORM\OneToMany(targetEntity="PossibleMaterialConfiguration", mappedBy="material", cascade={"persist"})
         */
        private $possibleMaterialConfigurations;
    

    PossibleMaterialConfiguration.php

    /**
     * PossibleMaterialConfiguration
     *
     * @ORM\Table()
     * @ORM\Entity
     */
    class PossibleMaterialConfiguration
    {
        /**
         * @var integer
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
    
        /**
         * @ORM\ManyToOne(targetEntity="Material", inversedBy="possibleMaterialConfigurations")
         * @ORM\JoinColumn(name="material_id", referencedColumnName="id")
         */
        private $material;
    
        /**
         * @var float
         *
         * @ORM\Column(name="thickness", type="decimal")
         */
        private $thickness;
    
        /**
         * @var float
         *
         * @ORM\Column(name="lengthMin", type="decimal")
         */
        private $lengthMin;
    
        /**
         * @var float
         *
         * @ORM\Column(name="lengthMax", type="decimal")
         */
        private $lengthMax;
    
        /**
         * @var float
         *
         * @ORM\Column(name="widthMin", type="decimal")
         */
        private $widthMin;
    
        /**
         * @var float
         *
         * @ORM\Column(name="widthMax", type="decimal")
         */
        private $widthMax;
    

1 个答案:

答案 0 :(得分:1)

看一下关于学说中的欠边的文章:

http://docs.doctrine-project.org/en/latest/reference/unitofwork-associations.html

基本上,doctrine不会检查哪一侧是“mappedBy”注释。

如果你想这样做:

$material->addPossibleMaterialConfiguration($possibleMaterialConfiguration);

然后您的addPossibleMaterialConfiguration函数应为:

function addPossibleMaterialConfiguration($assoc) {
    $this->possibleMaterialConfigurations[] = $assoc;
    $assoc->setMaterial($this);
}