Чтобы сделать то, что вы хотите сделать, вы должны использовать 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
действительно имеет смысл. Другим решением было бы сделать отдельные запросы для обоих объектов без изменения каких-либо из ваших объектов, но это не то, что вы, похоже, ищете.