Я начинаю с Symfony2.
Моя цель - перевести все старые инструменты интрасети из багги, фристайл-кода, написанного на PHP 4, в объектно-ориентированный и современный код. На данный момент у меня есть проблема с Doctrine при использовании отображения OneToOne
.
У меня есть компания таблиц, которая содержит столбец под названием extent_id
который является ссылкой на таблицу company_extent
.
Сейчас я жду: в объекте моей Company
company_extent
правильный company_extent
.
Вот что я пробовал:
/**
* @ORM\Entity
* @ORM\Table(name="company")
*/
class Company
{
/**
* @OneToOne(targetEntity="CompanyExtent", inversedBy="company")
* @JoinColumn(name="extent_id", referencedColumnName="id")
**/
private $extent;
}
class CompanyExtent
{
/**
* @ORM\OneToOne(targetEntity="Company", mappedBy="extent")
*/
private $company;
}
Но, если я сброшу свой объект компании, я получаю:
object(Dsa\ServiceMeetingBundle\Entity\Company)[274]
protected 'extentId' => int 1
private 'extent' => null
protected 'stretchId' => int 1
Вы должны добавить атрибут "ID" для каждого созданного вами объекта.
/**
* @ORM\Entity
* @ORM\Table(name="company")
*/
class Company
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @OneToOne(targetEntity="CompanyExtent", inversedBy="company")
* @JoinColumn(name="extent_id", referencedColumnName="id")
**/
private $extent;
}
В аннотации @JoinColumn(name="extent_id", referencedColumnName="id")
вы используете ссылку, которая не существует.
class CompanyExtent
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\OneToOne(targetEntity="Company", mappedBy="extent")
*/
private $company;
}
И, как упоминалось в @cerad, я советую вам прочитать об Управлении отношениями объектов Doctrine. Это очень важная часть развития.