【问题标题】:Doctrine ORM does not persist relationsDoctrine ORM 不坚持关系
【发布时间】:2013-07-23 23:46:01
【问题描述】:

我在坚持与教义的关系时遇到问题。

这是我正在做的过程:

  1. 创建 Material 对象并填充数据
  2. 创建PossibleMaterialConfiguration 对象并填充数据
  3. 将PossibleMaterialConfiguration 对象分配给材质对象

    $material->addPossibleMaterialConfiguration($possibleMaterialConfiguration);

结果: 可能MaterialConfiguration.material_id 为空!

但是当我反其道而行之并将材质对象分配给 PossibleMaterialConfiguration 时,它确实有效!

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

我的两个实体:

材料.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;

【问题讨论】:

    标签: php doctrine


    【解决方案1】:

    看一下关于欠条理的文章:

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

    基本上,学说不会检查“mappedBy”注释所在的一侧。

    如果你想做:

    $material->addPossibleMaterialConfiguration($possibleMaterialConfiguration);

    那么你的addPossibleMaterialConfiguration 函数应该是:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-11
      • 1970-01-01
      相关资源
      最近更新 更多