Symfony 2: Учение OneToMany отношение - PullRequest
0 голосов
/ 30 декабря 2011

У меня есть 2 сущности:

class Client
{
    /**
     * @var integer $mainId
     *
     * @ORM\Column(name="main_id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $mainId;

    /**
     * @var string $id
     * 
     * @ORM\Column(name="id", type="string", length=10, nullable=false, unique=true)
     */
    private $id;

    ...
}

class Child
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var Client
     *
     * @ORM\ManyToOne(targetEntity="Client")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="client_id", referencedColumnName="id")
     * })
     */
    private $clientId;

    ....
}

По какой-то причине внешний ключ из дочерней таблицы не указывает на первичный ключ таблицы Client, но в любом случае я не думаю, что этодолжна быть проблема.

Когда я пытаюсь выполнить следующее действие в моем контроллере:

$ child-> set ...$ Ляющих> setClientId ($ клиент);$ em-> persist ($ child);

Я получаю следующую ошибку:

Notice: Undefined index: id in C:\wamp\www\myApp\vendor\doctrine\lib\Doctrine\ORM\Persisters\BasicEntityPersister.php line 510 

Я пытался добавить аннотацию @Index в свою таблицу клиентов, но все равно получаю ошибку ...

У меня никогда не было такой проблемы, любая помощь будет приветствоваться.

РЕДАКТИРОВАТЬ

Если я переместлю "@ORM \ Idmsgstr "аннотация от $ mainId до $ id в моем классе Client, это работает.Означает ли это, что Doctrine 2 не допускает использование внешних ключей, указывающих на поля «не первичного ключа»?

Ответы [ 2 ]

1 голос
/ 30 декабря 2011

referencedColumnName должен быть установлен на столбец, для которого установлено @ORM\Id, поэтому в вашем случае referencedColumnName="main_id" должно работать

(не забудьте очистить кеш и запустить doctrine:schema:update --force после измененияэти настройки)

0 голосов
/ 31 декабря 2011

почему бы вам просто не спроектировать все в вашей базе данных, включая внешние ключи и т. Д. ... и просто создать ваши сущности на основе базы данных, используя это здесь?

http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html

отлично сработало для меня.

...