У меня есть две таблицы: пользователи и контактыУчение - как установить один-к-одному отношения между двумя сущностями
Пользователи
- идентификатор
- имя пользователя
Контакты
- идентификатор
- user_id
- электронной (я упростил структуру)
Теперь, как настроить доктрины органы должным образом?
/**
* @ORM\Entity
* @ORM\Table(name="users")
*/
class User extends BaseEntity {
/**
* @Id
* @GeneratedValue
* @Column(type="bigint")
*/
protected $id;
/**
* @ORM\Column(type="string", unique=true)
*/
protected $username;
/**
* @ORM\OneToOne(targetEntity="Contact")
* @ORM\JoinColumn(name="id", referencedColumnName="user_id", onDelete="CASCADE")
**/
protected $contact;
}
Контактное лицо:
/**
* @ORM\Entity
* @ORM\Table(name="contacts")
*/
class Contact extends BaseEntity {
/**
* @Id
* @GeneratedValue
* @Column(type="bigint")
*/
protected $id;
/**
* @var User
* @ORM\OneToOne(targetEntity="User")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $user;
/**
* @ORM\Column(type="string")
*/
protected $email;
}
Дела в том, что я не уверен, является ли отношение объекта установлено правильно.
- Я не знаю, как установить, если
User
удаляется затем удалитьContact
, но не наоборот. - Если я создаю
$user = new User()
, а затем$contact = new Contact()
, как с ними связаться?$user->contact = $contact
? Будет ли послеpersist()
иflush()
правильно заполнитьuser_id
и вставить данные в обе таблицы? - Я получаю ошибку
A new entity was found through the relationship '...\User#contact' that was not configured to cascade persist operations for entity: ...\[email protected] To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example @ManyToOne(..,cascade={"persist"}). If you cannot find out which entity causes the problem implement '...\Contact#__toString()' to get a clue.
Я застрял на этом, который, я думаю, связан с моей проблемой №1, и поэтому я не могу проверить # 2.
Я просматривал документы в течение нескольких часов, но я застрял, и я не нашел ни одного реального примера, который бы вел меня ... Может ли кто-нибудь помочь мне, показывая мне правильную конфигурацию отношений этих сущностей?
Ok спасибо, что хорошо звучит. Хотя я пытался установить 'cascade = {" persist "," remove "})' и когда я делаю '$ user = new User()' '$ contact = new Contact()' '$ user-> contact = $ contact '' $ entityManager-> persist ($ user) '' $ entityManager-> flush() 'Пользователь создается, но не Contact. Что я делаю не так? – simPod
Если я вручную 'persist ($ contact)' работает. Должен ли я это делать или могу ли я каким-то образом включить его в аннотации '@ ORM'? – simPod
@simPod добавление 'cascade = {" persist "," remove "})' к свойству '$ contact' вашего объекта' User' должно позволить вам добавить неустановленный контакт к 'User'. есть ли у вас какие-либо другие сопоставления в «User», которые могут вызвать проблему? – FuzzyTree