首页 > 解决方案 > 如何设置最大结果查询包含左连接关系?

问题描述

 public function getArtistsScreen(array $filters)
{
    $qb = $this->getEntityManager()->createQueryBuilder('ap');
    $qb->select('ap')->from(ArtistProfile::class, 'ap');

    $qb->select("apc18.name , GROUP_CONCAT( ap.id, '|', usr.firstName, '|', usr.lastName,
     '|', cat.id, '|', ap.averageRating, '|', ap.weekdayHourlyRate, '|', ap.countTotalComments, '|', usr.avatar, '|', apc18.name SEPARATOR ';' ) as artists")

        ->join('ap.user', 'usr')
        ->join('ap.category', 'cat')
        ->leftJoin(ArtistProfileCategoryI18N::class, 'apc18', Join::WITH, 'cat.id = apc18.artistProfileCategory')
        ->where($qb->expr()->in('ap.category', ':category'))->setParameter('category', $filters['category'])
        ->andWhere('ap.status =:status')->setParameter('status','a')
        ->orderBy('ap.id', 'DESC')
        ->setFirstResult(0)
        ->setMaxResults(1);


    $data = $qb->getQuery()->getResult();
    return $this->screensConcatParser($data);

}

还有 screenConcatParser 方法

 public function screensConcatParser($data)
{
    /** @var ScreenModel[] $itemsArtist */
    $itemsArtist = [];
    foreach ($data as $item) {

        $artists = explode(';', $item['artists']);
        $objectData = [];
        foreach ($artists as $artist) {
            $handleArtist = explode('|', $artist);
            $objectData [] =new ScreenModel($handleArtist[1] . ' ' . $handleArtist[2],  (int)$handleArtist[3], (float)$handleArtist[4], $handleArtist[7],
                (int)$handleArtist[6], (float) $handleArtist[5], (int)$handleArtist[0],1, null, $handleArtist[8],null,null);
        }
        $itemsArtist [] = [
            'items' => $objectData,
            'title' => $objectData[0]->getMotto()
        ];
    }
    return $itemsArtist;
}

我也尝试使用 orderBy 函数,但它没有给出任何不同的结果,而不是左连接我尝试了内部连接,但没有发现任何差异

标签: doctrine-ormsymfony4

解决方案


推荐阅读