соотношение таково: MailTemplate может быть использован многими EMail но EMail связан только с одним MailTemplate.Doctrine2 Сохранить многие к одному объекты
Проблема возникает при попытке вставить новые записи. Ошибка:
не удается получить доступ к пуст свойству
и появляется в методе setEmail()
Определение MailTemplate:
/**
* @Entity
* @Table(name="MailTemplate")
*/
class MailTemplate
{
/**
* @Id
* @Column(type="integer", options={"unsigned":true})
* @GeneratedValue(strategy="AUTO")
*/
protected $mailtemplateID;
/**
* @ManyToOne(targetEntity="EMail", inversedBy="MailTemplate")
* @JoinColumn(name="emailID", referencedColumnName="emailID")
**/
protected $email = null;
// ...
public function setEmail(EMail $email)
{
$this->$email = $email;
}
}
Определение EMail:
/**
* @Entity
* @Table(name="EMail")
*/
class EMail
{
/**
* @Id
* @Column(type="integer", options={"unsigned":true})
* @GeneratedValue(strategy="AUTO")
*/
protected $emailID;
// ...
}
Затем я пытаюсь создать свои объекты, как так:
$mail_template = new MailTemplate();
$email = new EMail();
//... Adding values with the usual setter methods
$entity_manager->persist($email);
$entity_manager->flush($email);
$mail_template->setEmail($email);
$entity_manager->persist($mail_template);
$entity_manager->flush($mail_template);
Я также попытался с помощью метода __construct()
так:
// Inside the MailTemplate class
public function __construct(EMail $email)
{
$this->$email = $email;
}
Но я всегда получаю ошибку, упомянутых выше , Что мне не хватает?
Редактировать (на комментарий noobie-php). Я добавил это к EMail лица:
/**
* @Id
* @Column(type="integer", options={"unsigned":true})
* @GeneratedValue(strategy="AUTO")
* @OneToMany(targetEntity="MailTemplate", mappedBy="EMail")
* @JoinColumn(name="mailtemplateID", referencedColumnName="mailtemplateID")
*/
protected $emailID;
Но все-таки происходит та же ошибка ...
где отношение один ко многим? –
@ noobie-php В документах (http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/association-mapping.html) он ничего не говорит ... Отредактированное название –
хорошо, вы все равно должны его реализовать. Затем запустите команду обновления доктрины –