Symfony 4 Доктрина персистировать объект с ассоциацией, которая существует в БД - PullRequest
0 голосов
/ 07 декабря 2018

Я генерирую полный объект с ассоциациями с jms-сериализатором.

$obj = $serializer->deserialize($serializer->serialize($data, 'json'), 'array<App\Entity\Company>', 'json');

Генерируемый объект выглядит

Company {#521
  -addresses: ArrayCollection {#557
    -elements: array:2 [
      0 => Address {#544
        -id: null
        -company: Company {#521}
        -type: AddressType {#552
          -id: null
          -name: "Main Address"
        }
      }
      1 => Address {#554
        -id: null
        -company: Company {#521}
        -type: AddressType {#556
          -id: null
          -name: "Correspond Address"
        }
      }
    ]
  }
 }

Company

/**
 * @ORM\OneToMany(targetEntity="App\Entity\Address", mappedBy="company", orphanRemoval=true, cascade={"persist","remove"})
 * @JMS\Accessor(setter="setAddresses")
 */
 private $addresses;

Адреса

/**
 * @ORM\ManyToOne(targetEntity="App\Entity\Company", inversedBy="addresses")
 * @ORM\JoinColumn(nullable=false)
 *
 */
private $company;

/**
 * @ORM\ManyToOne(targetEntity="App\Entity\AddressType", cascade={"persist","remove"})
 * @ORM\JoinColumn(nullable=false)
 */
private $type;

AddressType

/**
 * @ORM\Column(type="string", length=255, unique=true)
 */
private $name;

Теперь я пытаюсь сохранить этот объект и сбросить его в базу данных, ноКогда AddresType-> name существует, я получаю ошибку из db о существующем значении.Это нормальное поведение db, потому что имя ключа уникально, и доктрина пытается INSERT it.

Как добавить отношение, если объект существует в базе данных, чтобы использовать его вместо попытки вставить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...