2012-02-27 37 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