这是问题所在:
Routing
具有属性objectId
和的类objectType
。objectId
是一个 int,并且objectType
是一个字符串。这样做的原因是允许同一个表保存不同类型路由的数据。例如对于Products
,Department
和的路由Brand
。所以,theobjectType
和 the的组合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;
...
每个产品、品牌和部门都有自己的 URL,该 URL 保存在由 设置的路由表中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;
...
我真正苦苦挣扎的是如何设置关系,以便部门、产品和品牌可以从单个路由实体访问他们的 URL。
我尝试将关系添加到$objectId
,但似乎不喜欢那样。可以这样设置吗?
我基本上想要实现的是获取数据对象并能够获取对象的 URL,例如:
$departments = $em->getRepository("AdamStaceySiteBundle:Department")->findAll();
foreach ($departments as $department)
{
echo '<a href="'.$department->getUrl().'">'.$department->getMenuTitle().'</a>;
}
任何人都可以帮忙吗?