Symfony 2:教义不能创造关系


Symfony 2: Doctrine can't create relationship

我对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生成命令表生成架构时。但是关系没有生成/状态列不会在客户表中生成/。为什么?我不知道?我会很高兴每一个建议和帖子。

如果您密切关注 Doctrine2 文档中的示例,您可能会遇到这个问题,因为 Symfony2 将所有 Doctrine2 注释放入 orm 命名空间中,而您的 OneToOne 和 JoinColumn 注释中似乎缺少这些注释。$state属性的代码应如下所示:

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

编辑:随着Symfony2 beta2中引入的更改,注释发生了一些变化。注释在使用前需要导入;导入 Doctrine 看起来像这样:

use Doctrine'ORM'Mapping as ORM;

然后新的用法如下所示:

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

有一些关于注释系统的进一步更改的讨论;如果这些更改被推出,我将返回进行另一次编辑。