要做你想做的事,你必须使用Class table inheritance和鉴别器列的系统。
对于您的示例,创建以下实体:
<?php
namespace ...
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="discriminator", type="string")
* @ORM\DiscriminatorMap({"category" = "Category", "brand" = "Brand"})
*/
abstract class NameHolder
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
// Getters and setters
}
然后让你的 2 个实体继承这个类:
<?php
namespace ...;
use Doctrine\ORM\Mapping as ORM;
/**
* FirstChild
*
* @ORM\Table()
* @ORM\Entity
*/
class Category extends NameHolder
{
// all methods and properties except from the "name"
}
和:
<?php
namespace ...;
use Doctrine\ORM\Mapping as ORM;
/**
* FirstChild
*
* @ORM\Table()
* @ORM\Entity
*/
class Brand extends NameHolder
{
// all methods and properties except from the "name"
}
所以现在你可以这样查询:
$group = $this->getDoctrine()
->getRepository('AudsurShopBundle:NameHolder')
->findOneBy(array('name' => $slug))
->getProducts();
这将返回一个包含Brand 和Category 实体的数组集合。
但是我不确定NameHolder 课程是否真的有意义。另一种解决方案是在不更改任何实体的情况下对两个实体进行单独查询,但这似乎不是您想要的。