2

我想获取所有文章,并获取文章的类型(判别器)。也许还有另一种方法可以组合所有孩子(所有固定和拍卖的记录)并在创建日期对它们进行排序?

文章实体:

/**
 * 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
{
    ...
4

1 回答 1

4

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){

  }
}
于 2014-01-03T18:24:25.140 回答