Наследование таблицы классов Doctrine получить все дочерние элементы

Я хочу получить все статьи и получить тип статьи (дискриминатор). Может есть другой способ объединить всех дочерних (все записи фиксированных и аукционных) и отсортировать их по дате создания?

Статья Сущность:

/**
 * Article
 *
 * @ORM\Table("articles")
 * @ORM\Entity
 * @ORM\HasLifecycleCallbacks
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="article_type", type="string")
 * @ORM\DiscriminatorMap({"auction" = "Auction", "fixed" = "Fixed", "tba" = "TBA"})
 */
class Article
{

Объект аукциона

/**
 * Auction
 *
 * @ORM\Table("auction")
 * @ORM\Entity
 */
class Auction extends Article
{
...

Фиксированная сущность

/**
 * Fixed
 *
 * @ORM\Table("fixed")
 * @ORM\Entity
 */
class Fixed extends Article
{
    ...

person Mathias Dewelde    schedule 03.01.2014    source источник


Ответы (1)


1. Создайте репозиторий для вашей статьи и добавьте метод, который возвращает все статьи (конечно, вы можете использовать все методы, доступные в Doctrine2, find, findAll...). Чтобы упорядочить свой объект к дате создания, вы должны иметь это свойство в своем объекте статьи (это свойство будет использоваться как для ребенка, так и должно быть в вашем объекте статьи, ведь это имеет смысл)

class Article {

    /**
     * @var \DateTime
     * 
     * @ORM\Column(name="created_at", type="datetime")
     * 
     */
    protected $createdAt
}

class ArticleRepository extends EntityRepository{

 public function getAll() {

    try {

        $qb = $this->getEntityManager()->createQueryBuilder();

        $qb->select('a')
           ->from('bundleName:Article', 'a');

        $qb->orderBy('a.createdAt', 'DESC');

         return $qb->getQuery()->getResult();

       } catch (\Doctrine\ORM\NoResultException $e) {
           return array();
       } catch (\Exception $e) {
           return array();
       }
}

На вашем контроллере, чтобы проверить тип вашей статьи, вы можете сделать:

$entities = $em->getRepository('bundleName:Article')->getAll();

foreach(entities as $entity){

  if($entity instanceof Fixed){
    // do what you want
  }elseif($entity instanceof Auction){

  }
}
person João Alves    schedule 03.01.2014