У меня есть следующие модели:
UserStatus:
<?php
namespace Base;
/** @Entity @Table(name="user_status") */
class UserStatus extends \Skeleton\Base {
/**
* @Id @Column(type="integer")
* @GeneratedValue(strategy="AUTO")
*/
protected $id;
/** @Column(length="256") */
protected $name;
/**
* @OneToMany(targetEntity="Base\User", mappedBy="Status")
*/
protected $Users;
}
Пользователь:
<?php
namespace Base;
/**
* @Entity
* @Table(name="user")
* @InheritanceType("JOINED")
* @DiscriminatorColumn(name="discriminator", type="string")
* @DiscriminatorMap({
* "admin" = "Administrator",
* "participant" = "Participant",
* "employee" = "Employee"
* })
*/
class User extends \Skeleton\Skeleton implements Interfaces\User {
/**
* @Id @Column(type="integer")
* @GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ManyToOne(targetEntity="UserStatus", inversedBy="Users")
* @JoinColumn(name="status_id", referencedColumnName="id")
*/
protected $Status;
/** @Column(length=255) */
protected $username;
/** @Column(length=255) */
protected $password;
/** @Column(length=255) */
protected $firstname;
/** @Column(length=128) */
protected $insertion;
/** @Column(length=255) */
protected $lastname;
/** @Column(type="datetime") */
protected $created;
/** @Column(type="integer", name="creator_id") */
protected $Creator;
/** @Column(type="datetime") */
protected $modified;
/** @Column(type="integer", name="modifier_id") */
protected $Modifier;
}
И следующий код контроллера:
$Employee = new \Base\User();
$Employee->username = "Employee";
$Employee->password = "Just an encrypted password";
$Employee->firstname = "Just";
$Employee->insertion = "a";
$Employee->lastname = "Employee";
$UserStatus = \Base\UserStatus::getById(1);
$Employee->Status = $UserStatus;
$UserStatus->Users->add($Employee);
$em = \Doctrine\Configure\EntityManager::instance();
$em->persist($UserStatus);
$em->persist($Employee);
$em->flush();
Код контроллера дает мне:
PDOException [ 23000 ]: SQLSTATE[23000]: Integrity constraint violation: 1062
Duplicate entry 'To be authenticated' for key 'name'
Само собой разумеется, но имя загруженного UserStatus - «Для аутентификации». Каким-то образом он пытается вставить UserStatus в базу данных вместо сохранения отношения OneToMany UserStatus.
Может кто-нибудь сказать мне, что не так с этим кодом?
@ beberlei: Когда я удаляю эту строку, я получаю другую ошибку:
InvalidArgumentException [ 0 ]: A new entity was found through a relationship that was
not configured to cascade persist operations: Base\UserStatus@00000000485b93d40000000031ebec33. Explicitly persist the new entity or
configure cascading persist operations on the relationship.