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 で利用可能なすべてのメソッドを使用できます)。作成日までにエンティティを注文するには、Article エンティティにそのプロパティが必要です (このプロパティは両方の子に使用され、Article エンティティに存在する必要があります。意味があります)

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 に答える