2012-02-27 47 views
2

注意:在我问之前,我确实做了一些搜索。主义不能生成关系

这里是我的问题:

我有两个实体:一个是渠道,另一种是插件,一个通道可以有很多的插件,下面是代码,

频道:

use Gedmo\Mapping\Annotation as Gedmo; // gedmo annotations 

use Doctrine\Common\Collections\ArrayCollection; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* Mikay\MikiBundle\Entity\Channel 
* 
* @ORM\Table(name="channels") 
* @ORM\Entity(repositoryClass="Mikay\MikiBundle\Entity\ChannelRepository") 
*/ 
<?php 
class Channel 
{ 
    /**  
    * @ORM\OneToMany(targetEntity="Plugin", mappedBy="channel") 
    */ 
    private $plugins;    

插件:

use Doctrine\ORM\Mapping as ORM; 

/** 
* Mikay\MikiBundle\Entity\Plugin 
* 
* @ORM\Table(name="plugins") 
* @ORM\Entity(repositoryClass="Mikay\MikiBundle\Entity\PluginRepository") 
*/ 
<?php 
class Plugin 
{ 
    /** 
    * @ORM\ManyToOne(targetEntity="Channel", inversedBy="plugins") 
    * @ORM\JoinColumn(name="channel_id", referencedColumnName="id") 
    */ 
    private $channel; 

我用这个命令来更新数据库,但它从来没有创建两个表之间的关系。

php app/console doctrine:schema:update --force 

那么,有什么问题,它可能是一些配置错误?

编辑:

注: 不要添加

@ORM\Column(name="channel_id", type="integer") 

这种annonation在插件实体,否则它不会产生两个表之间的关系,这是我的问题的原因。

+2

您可以删除JoinColumn声明,它是无用的。是什么让你说关系从来没有创造?当你删除声明,更新模式,设置声明并运行'php app/console doctrine:schema:update --dump-sql'时会发生什么? – greg0ire 2012-02-27 19:07:51

+0

谢谢,似乎我所有的代码都是正确的,并且现在可以在桌子之间产生关系。我会解决这个问题。是的,JoinColumn语句是不必要的。再次感谢。 – imikay 2012-02-28 02:27:11

+0

而你只需要在拥有的一面指定关系,反面是没有必要的。 – imikay 2012-03-03 19:34:32

回答

2

我会再次重复了这里。 不要添加

@ORM\Column(name="channel_id", type="integer") 

这种类型的引用其他实体,在我的情况下,物业annonation,是插件实体的信道特性,否则它不会产生两个表之间的关系,这是我的问题的原因。

2

你需要告诉学说这些是实体。

/** 
* @ORM\Entity() 
*/ 
class Channel 
{ 

这里是验证学说可以看到你的实体的快捷方式:

php app/console doctrine:mapping:info 
+0

我确实有@ORM \ Entity()声明,我会更新我的问题以添加此内容,并且可以使用doctrine:mapping:info命令查看我的实体。 – imikay 2012-02-28 01:55:55