Symfony 2:Doctrine无法创建关系

5

我对Symfony 2.0和Doctrine非常陌生。我在不同bundle中有state和customer实体。我只想在state和customer之间添加关联。我已经编写了state和customer实体的代码。以下是我的代码:

/**
 * @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
如果你紧密跟随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;

进一步更改注释系统的讨论;如果这些更改得以实施,我会回来进行另一次编辑。


谢谢回复。根据您的指示,我已将所有“@orm”注释更改为“orm”。然后运行“code”php app/console doctrine:schema:create 'code'命令并收到“code”没有元数据类要处理的消息。“code”表格没有生成。有什么想法吗? - Zeck
你能否更新你的问题并提供新实体(例如,用现有实体替换示例)? - Problematic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接