user1731323
user1731323

Reputation: 85

Doctrine ORM does not persist relations

I have a problem persisting relations with doctrine.

This is the process I'm doing:

  1. Create Material object & fill with data
  2. Create PossibleMaterialConfiguration Object & fill with data
  3. Assign PossibleMaterialConfiguration Object to Material Object with

    $material->addPossibleMaterialConfiguration($possibleMaterialConfiguration);

Result: PossibleMaterialConfiguration.material_id is empty!

But when I do it the other way round and assign Material Object to PossibleMaterialConfiguration it does work!

I'm driving crazy! What the hell is going on here? Thanks in advance.

My two entities:

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;

Upvotes: 0

Views: 254

Answers (1)

Pierrickouw
Pierrickouw

Reputation: 4704

Take a look at the article about owing side in doctrine :

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

Basically, doctrine won't check the side where is the "mappedBy" annotation.

If you want to do :

$material->addPossibleMaterialConfiguration($possibleMaterialConfiguration);

Then your addPossibleMaterialConfiguration function should be :

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

Upvotes: 1

Related Questions