Symfony2 Результат является нулевым по ссылке OneToOne

0

Я начинаю с 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
  • 0
    Я подозреваю, что вы работаете с идентификаторами, а не объектами. Вам не нужно иметь свойство exteId в вашей компании. Подробно изучите пример в документации, чтобы узнать основы диспетчера объектных отношений Doctrine symfony.com/doc/current/book/doctrine.html.
  • 0
    Можете ли вы показать, использовать код, который вы используете для создания дампа? (и добавьте полные сущности, пожалуйста)
Теги:
doctrine2
doctrine-orm

1 ответ

0
Лучший ответ

Вы должны добавить атрибут "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. Это очень важная часть развития.

  • 0
    Эй, в моей настоящей сущности у меня есть идентификаторы. Я читаю все, что я могу найти. Но в данный момент я не могу найти ни одного примера, чтобы поработать над этим.
  • 0
    @Chrisotopher вы можете посмотреть официальные документы доктрины : doctrine-orm.readthedocs.org/en/latest/reference/…

Ещё вопросы

Сообщество Overcoder
Наверх
Меню