這裏的問題是:Symfony2中使用Doctrine批註的多個JoinColumns?
具有屬性objectId
和objectType
類Routing
。 objectId
是一個int,而objectType
是一個字符串。原因是允許同一張表保存不同類型的路由數據。例如,路由Products
,Department
和Brand
。所以,objectType
和objectId
的組合就是我的JoinColumn。
如何與Doctrine2建立這種雙向關係?我研究了遺傳關係,但沒有一個概念似乎是我期待的。
我可以在數據庫中創建一些視圖,只是有幾個不同的路由實體,但這似乎不是最好的路線。
這裏是我的實體Department
,Product
和Brand
。
../Entity/Department.php
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity()
* @ORM\Table(name="departments")
*/
class Department implements DescribableInterface
{
/**
* @ORM\Id
* @ORM\Column(name="id", type="integer", length=11)
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="status", type="string", length=1)
*/
private $status;
/**
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
...
../Entity/Product.php
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="products")
*/
class Product implements DescribableInterface
{
/**
* @ORM\Id
* @ORM\Column(name="id", type="integer", length=11)
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="status", type="string", length=1)
*/
private $status;
/**
* @ORM\Column(name="product_code", type="string", length=100, nullable=true)
*/
private $productCode = '';
/**
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
...
../Entity/Brand.php
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="brands")
*/
class Brand
{
/**
* @ORM\Id
* @ORM\Column(name="id", type="integer", length=11)
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="status", type="string", length=1)
*/
private $status = 'a';
/**
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
...
每個產品,品牌和部門具有在由object_type
並設置路由表舉行了自己的網址object_id
其中object_type
只是department
,product
或brand
而object_id
是相應產品,品牌或部門的唯一ID。
../Entity/Routing.php
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="routing")
*/
class Routing
{
/**
* @ORM\Id
* @ORM\Column(name="id", type="integer", length=11)
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="object_id", type="integer", length=11)
*/
private $objectId;
/**
* @ORM\Column(name="object_type", type="string", length=100)
*/
private $objectType;
/**
* @ORM\Column(name="url", type="text")
*/
private $url;
...
我真的很掙扎是怎樣安裝的關係,使各部門,產品和品牌能夠從單一路由訪問他們的網址。
我曾嘗試將關係添加到$objectId
,但似乎並不那樣。是否可以像這樣設置?
什麼,我基本上是試圖實現的是獲取數據對象,並要得到一個對象的URL的能力,例如:
$departments = $em->getRepository("AdamStaceySiteBundle:Department")->findAll();
foreach ($departments as $department)
{
echo '<a href="'.$department->getUrl().'">'.$department->getMenuTitle().'</a>;
}
誰能幫助?
你能否提供相關的代碼? – Hast 2013-03-11 17:26:56
我獨自一人誰沒有得到這個問題? – 2013-03-11 19:11:12
@ElnurAbdurrakhimov這就是爲什麼我要求代碼:) – Hast 2013-03-11 19:43:52