Symfony 2: доктрина не может создавать отношения - PullRequest
5 голосов
/ 10 мая 2011

Я очень новичок в Symfony 2.0 и доктрине.Я имею государство и юридическое лицо клиента в другом пакете.Я просто хочу добавить отношения между государством и клиентом.Я закодирован государством и заказчиком.Вот мой код:

/**
 * @orm:Entity
 */
class Customer
{
    /**
     * @orm:Id
     * @orm:Column(type="integer")
     * @orm:GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @OneToOne(targetEntity="State")
     * @JoinColumn(name="state_id", referencedColumnName="id")
     */
    protected $state;

}

/**
 * @orm:Entity
 */
class State
{
    /**
     * @orm:Id
     * @orm:Column(type="integer")
     * @orm:GeneratedValue(strategy="IDENTITY")
     */
    protected $id;

    /**
     * @orm:Column(type="string", length="50")
     */
    protected $name;
}

И мой конфигурационный файл:

doctrine:
    dbal:
        driver:   %database_driver%
        host:     %database_host%
        dbname:   %database_name%
        user:     %database_user%
        password: %database_password%

    orm:
        auto_generate_proxy_classes: %kernel.debug%
        mappings:
            FogCustomerBundle: { type: annotation, dir: Entity/ }
            FogMainBundle: { type: annotation, dir: Entity/ }

Так что моя проблема заключается в том, что я генерирую схему, используя php app/console doctrine:schema:create таблицы команд.Но отношения не генерируются / столбец состояния не генерируется в таблице клиентов /.Зачем?Понятия не имею?Я буду очень рад за каждый совет и сообщение.

1 Ответ

9 голосов
/ 10 мая 2011

Вы можете столкнуться с этой проблемой, если внимательно следите за примерами из документации Doctrine2, поскольку Symfony2 помещает все аннотации Doctrine2 в пространство имен orm, которое, как вам кажется, отсутствует в аннотациях OneToOne и JoinColumn.Ваш код свойства $ state должен выглядеть следующим образом:

/**
 * @orm:OneToOne(targetEntity="State")
 * @orm:JoinColumn(name="state_id", referencedColumnName="id")
 */
protected $state;

EDIT: С изменениями, внесенными в бета-версию Symfony2, аннотации немного изменились.Аннотации должны быть импортированы перед использованием;импорт Doctrine выглядит следующим образом:

use Doctrine\ORM\Mapping as ORM;

Тогда новое использование выглядит следующим образом:

/**
 * @ORM\OneToOne(targetEntity="State")
 * @ORM\JoinColumn(name="state_id", referencedColumnName="id")
 */
protected $state;

имеется некоторое обсуждение дальнейших изменений в системе аннотаций;если эти изменения будут введены, я вернусь с другим редактированием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...