2015-10-18 135 views
0

此問題涉及使用ORM的Symfony2表關係。我有三個相互關聯的表/實體。這種關係與Wordpress的帖子,分類和分類關係表非常相似。Symfony2在另一個實體中獲取實體的實體

表1包含帖子。 表2包含類別 表3包含類別和帖子之間的關係。

我希望能夠在posts表中擁有categories屬性,並在categories表中擁有posts屬性。所以,當我打電話。

分類 - >職位:我應該得到該類別的職位。 的帖子 - >類別:我應該得到帖子所屬的類別。

我想每個表都有獨特的類別,我希望所有的帖子都指向一個類別,而不必爲已經存在的類別創建一個新的條目,這就是ManyToOne或OneToMany所提供的,這就是爲什麼第三個表I認爲是必要的。

例如這裏是關係

class Category_relationship 
{ 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="object_id", type="bigint") 
    * 
    * @ORM\ManyToOne(targetEntity="Worksheet",   inversedBy="category_relationships") 
    * @ORM\JoinColumn(name="worksheet_id", referencedColumnName="id", nullable=FALSE) 
    */ 
    private $objectId; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="category_id", type="bigint") 
    * 
    * @ORM\ManyToOne(targetEntity="Category", inversedBy="categories") 
    * @ORM\JoinColumn(name="category_id", referencedColumnName="id", nullable=FALSE) 
    */ 
    private $categoryId; 

} 

這裏是Category類:

class Category 
{ 
    /** 
    * @ORM\OneToMany(targetEntity="Category_relationship", mappedBy="categoryId", cascade={"persist", "remove"}, orphanRemoval=TRUE) 
    */ 
    protected $posts; 
} 

這裏是Category類:

class Posts 
{ /** 
    * @ORM\OneToMany(targetEntity="Category_relationship", mappedBy="objectId", cascade={"persist", "remove"}, orphanRemoval=TRUE) 
    */ 
    protected $categories; 
} 

我想創建一個系統,我可以將帖子分配給一個類別,但類別表只能包含1個關於該類別的條目。我也希望能夠使用表達式鏈接;

後>類別 類別 - >帖子

後> AddCategory() 類別 - > AddPost()

感謝您的幫助。

+0

找到所有這些信息我不確定爲什麼你認爲多對一的關係不適合你需要的東西,我認爲他們會很好地工作。你有沒有嘗試過實施這個? –

+0

並且不需要第三個表格,您可以在擁有的一面使用外鍵處理此問題(原則處理所有這些問題) –

+0

問題是我不希望在類別中創建同一類別的多個條目表每次我附加一個類別的職位。我希望有一個獨特類別的記錄,並且可以將許多帖子分配給該類別。帖子可能有很多類別。 – user3072613

回答

1

看來你想要一個簡單的多對多關係。

每個帖子可以有多個類別,每個類別都有相關帖子的列表。許多到許多處理樞軸表本身。

因此,在後的實體必須聲明的關係那樣:

/** 
* @ORM\ManyToMany(targetEntity="Category", inversedBy="posts") 
* @ORM\JoinTable(name="PostsCategories", 
*  joinColumns={@ORM\JoinColumn(name="post_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="id")} 
*  ) 
**/ 
protected $categories; 

記住使用Doctrine \ ORM \與ORM別名映射(你不必單獨導入所有子類):

use Doctrine\ORM\Mapping as ORM; 

之後,你需要創建類構造一個新的ArrayCollection:

public function __construct() 
{ 
    $this->categories = new ArrayCollection(); 
} 

種並添加適當的方法,如addCategory:

public function addCategory(Category $category) 
{ 
    $this->categories[] = $category; 

    return $this; 
} 

您也可以自動添加它們:

php app/console doctrine:generate:entities BundleName:EntityName 
在類別實體

同樣的事情,但有一點不同的definiton:

/** 
* @ORM\ManyToMany(targetEntity="Post", mappedBy="categories") 
**/ 
protected $posts; 

你可以在Doctrine docs

+0

但請注意。我無法在類別表中添加post_id,因爲這意味着每個類別條目都屬於[僅]特定的帖子。這不是我想要的。我希望類別表中的每個條目與posts表中的每個條目一樣唯一。因此,唯一的實體可以擁有彼此的許多實體而不會有重複。即使在教條範圍之外,這聽起來也是不可能的,沒有使用第三個表來記錄唯一​​實體的關係,除非教條能夠在類別列 – user3072613

+1

中的職位列或類別ID數組中創建一個職位ID數組。 t在分類表中創建一個post_id。 多對多創建帖子和類別之間的數據透視表。 該表只會有兩列:post_id和category_id。 因此,外鍵位於數據透視表中。 在這種情況下,每個帖子可以有多個類別,每個類別可以有多個帖子。 如果您對此不瞭解,請告訴我們。 –

+0

因此,如果我能夠使用像; PostEntity->類別 或 CategoryEntity->帖子 ...這將返回各自的類別或職位? – user3072613

相關問題