Minor: Format code

pull/5135/head
Angel Fernando Quiroz Campos 2 years ago
parent 5d1faa2990
commit cf0cd9681f
  1. 51
      src/CoreBundle/Controller/SocialController.php
  2. 5
      src/CoreBundle/Repository/ExtraFieldOptionsRepository.php
  3. 30
      src/CoreBundle/Repository/MessageRepository.php
  4. 75
      src/CoreBundle/Repository/Node/UserRepository.php
  5. 33
      src/CoreBundle/Repository/Node/UsergroupRepository.php
  6. 16
      src/CoreBundle/Repository/TrackEOnlineRepository.php

@ -362,7 +362,7 @@ class SocialController extends AbstractController
$profileFieldsVisibilityJson = $settingsManager->getSetting('profile.profile_fields_visibility');
$profileFieldsVisibility = json_decode($profileFieldsVisibilityJson, true)['options'] ?? [];
$vCardUserLink = $profileFieldsVisibility['vcard'] ?? true ? $baseUrl.'/main/social/vcard_export.php?userId='.intval($userId) : '';
$vCardUserLink = $profileFieldsVisibility['vcard'] ?? true ? $baseUrl.'/main/social/vcard_export.php?userId='.(int) $userId : '';
$languageInfo = null;
if ($profileFieldsVisibility['language'] ?? true) {
@ -371,7 +371,7 @@ class SocialController extends AbstractController
$languageInfo = [
'label' => $language->getOriginalName(),
'value' => $language->getEnglishName(),
'code' => $language->getIsocode(),
'code' => $language->getIsocode(),
];
}
}
@ -382,11 +382,11 @@ class SocialController extends AbstractController
$response = [
'vCardUserLink' => $vCardUserLink,
'language' => $languageInfo,
'visibility' => $profileFieldsVisibility,
'language' => $languageInfo,
'visibility' => $profileFieldsVisibility,
'isUserOnline' => $isUserOnline,
'userOnlyInChat' => $userOnlyInChat,
'extraFields' => $extraFields,
'extraFields' => $extraFields,
];
return $this->json($response);
@ -417,7 +417,7 @@ class SocialController extends AbstractController
continue;
}
$fieldValue = is_array($value) ? implode(', ', $value) : $value;
$fieldValue = \is_array($value) ? implode(', ', $value) : $value;
switch ($extraField['type']) {
case ExtraField::FIELD_TYPE_RADIO:
@ -429,15 +429,17 @@ class SocialController extends AbstractController
}, $extraFieldOptions);
$fieldValue = implode(', ', $optionTexts);
}
break;
case ExtraField::FIELD_TYPE_GEOLOCALIZATION_COORDINATES:
case ExtraField::FIELD_TYPE_GEOLOCALIZATION:
$geoData = explode('::', $fieldValue);
$locationName = $geoData[0];
$coordinates = $geoData[1] ?? '';
$fieldValue = $locationName;
break;
break;
}
$extraFieldsFormatted[] = [
@ -469,7 +471,7 @@ class SocialController extends AbstractController
$receivedInvitations[] = [
'id' => $message->getId(),
'itemId' => $sender->getId(),
'itemName' => $sender->getFirstName() . ' ' . $sender->getLastName(),
'itemName' => $sender->getFirstName().' '.$sender->getLastName(),
'itemPicture' => $userRepository->getUserPicture($sender->getId()),
'content' => $message->getContent(),
'date' => $message->getSendDate()->format('Y-m-d H:i:s'),
@ -486,7 +488,7 @@ class SocialController extends AbstractController
$sentInvitations[] = [
'id' => $message->getId(),
'itemId' => $receiverUser->getId(),
'itemName' => $receiverUser->getFirstName() . ' ' . $receiverUser->getLastName(),
'itemName' => $receiverUser->getFirstName().' '.$receiverUser->getLastName(),
'itemPicture' => $userRepository->getUserPicture($receiverUser->getId()),
'content' => $message->getContent(),
'date' => $message->getSendDate()->format('Y-m-d H:i:s'),
@ -531,8 +533,8 @@ class SocialController extends AbstractController
$numberOfItems = $request->query->getInt('number_of_items', 1000);
$formattedResults = [];
if ($type === 'user') {
/* @var User $user */
if ('user' === $type) {
/** @var User $user */
$user = $this->getUser();
$results = $userRepository->searchUsersByTags($query, $user->getId(), 0, $from, $numberOfItems);
foreach ($results as $item) {
@ -540,15 +542,15 @@ class SocialController extends AbstractController
$relation = $userRepository->getUserRelationWithType($user->getId(), $item['id']);
$formattedResults[] = [
'id' => $item['id'],
'name' => $item['firstname'] . ' ' . $item['lastname'],
'name' => $item['firstname'].' '.$item['lastname'],
'avatar' => $userRepository->getUserPicture($item['id']),
'role' => $item['status'] === 5 ? 'student' : 'teacher',
'role' => 5 === $item['status'] ? 'student' : 'teacher',
'status' => $isUserOnline ? 'online' : 'offline',
'url' => '/social?id=' . $item['id'],
'url' => '/social?id='.$item['id'],
'relationType' => $relation['relationType'] ?? null,
];
}
} elseif ($type === 'group') {
} elseif ('group' === $type) {
// Perform group search
$results = $usergroupRepository->searchGroupsByTags($query, $from, $numberOfItems);
foreach ($results as $item) {
@ -557,7 +559,7 @@ class SocialController extends AbstractController
'name' => $item['title'],
'description' => $item['description'] ?? '',
'image' => $usergroupRepository->getUsergroupPicture($item['id']),
'url' => '/resources/usergroups/show/' . $item['id'],
'url' => '/resources/usergroups/show/'.$item['id'],
];
}
}
@ -571,13 +573,13 @@ class SocialController extends AbstractController
UsergroupRepository $usergroupRepository,
TrackEOnlineRepository $trackOnlineRepository
): JsonResponse {
/* @var User $user */
/** @var User $user */
$user = $this->getUser();
if (!$user) {
return $this->json(['error' => 'User not authenticated'], Response::HTTP_UNAUTHORIZED);
}
/* @var Usergroup $group */
/** @var Usergroup $group */
$group = $usergroupRepository->find($groupId);
if (!$group) {
return $this->json(['error' => 'Group not found'], Response::HTTP_NOT_FOUND);
@ -606,7 +608,6 @@ class SocialController extends AbstractController
#[Route('/group-action', name: 'chamilo_core_social_group_action')]
public function groupAction(Request $request, UsergroupRepository $usergroupRepository, EntityManagerInterface $em): JsonResponse
{
$data = json_decode($request->getContent(), true);
$userId = $data['userId'] ?? null;
@ -621,10 +622,12 @@ class SocialController extends AbstractController
switch ($action) {
case 'join':
$usergroupRepository->addUserToGroup($userId, $groupId);
break;
case 'leave':
$usergroupRepository->removeUserFromGroup($userId, $groupId);
break;
default:
@ -634,7 +637,7 @@ class SocialController extends AbstractController
$em->flush();
return $this->json(['success' => 'Action completed successfully']);
} catch (\Exception $e) {
} catch (Exception $e) {
return $this->json(['error' => $e->getMessage()], Response::HTTP_INTERNAL_SERVER_ERROR);
}
}
@ -673,10 +676,12 @@ class SocialController extends AbstractController
if (!$result) {
return $this->json(['error' => 'Invitation already exists or could not be sent'], Response::HTTP_BAD_REQUEST);
}
break;
case 'send_message':
$result = MessageManager::send_message($targetUserId, $subject, $content);
break;
case 'add_friend':
@ -686,10 +691,12 @@ class SocialController extends AbstractController
$userRepository->relateUsers($userReceiver, $userSender, $relationType);
$messageRepository->invitationAccepted($userSender, $userReceiver);
break;
case 'deny_friend':
$messageRepository->invitationDenied($userSender, $userReceiver);
break;
default:
@ -699,7 +706,7 @@ class SocialController extends AbstractController
$em->flush();
return $this->json(['success' => 'Action completed successfully']);
} catch (\Exception $e) {
} catch (Exception $e) {
return $this->json(['error' => $e->getMessage()], Response::HTTP_INTERNAL_SERVER_ERROR);
}
}
@ -708,6 +715,6 @@ class SocialController extends AbstractController
{
$userStatus = $userRepository->getExtraUserDataByField($userId, 'user_chat_status');
return !empty($userStatus) && isset($userStatus['user_chat_status']) && (int) $userStatus['user_chat_status'] === 1;
return !empty($userStatus) && isset($userStatus['user_chat_status']) && 1 === (int) $userStatus['user_chat_status'];
}
}

@ -20,8 +20,6 @@ class ExtraFieldOptionsRepository extends ServiceEntityRepository
/**
* Get the secondary options. For double select extra field.
*
* @return array
*/
public function findSecondaryOptions(ExtraFieldOptions $option): array
{
@ -53,7 +51,8 @@ class ExtraFieldOptionsRepository extends ServiceEntityRepository
'fieldId' => $fieldId,
'optionValue' => $optionValue,
'itemType' => $itemType,
]);
])
;
$result = $qb->getQuery()->getResult();

@ -10,6 +10,7 @@ use Chamilo\CoreBundle\Entity\Message;
use Chamilo\CoreBundle\Entity\MessageRelUser;
use Chamilo\CoreBundle\Entity\User;
use Chamilo\CoreBundle\Traits\Repository\RepositoryQueryBuilderTrait;
use DateTime;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\QueryBuilder;
use Doctrine\Persistence\ManagerRegistry;
@ -97,7 +98,8 @@ class MessageRepository extends ServiceEntityRepository
'status' => Message::MESSAGE_STATUS_INVITATION_PENDING,
])
->getQuery()
->getResult();
->getResult()
;
}
public function findSentInvitationsByUser(User $user): array
@ -112,7 +114,8 @@ class MessageRepository extends ServiceEntityRepository
'status' => Message::MESSAGE_STATUS_INVITATION_PENDING,
])
->getQuery()
->getResult();
->getResult()
;
}
public function sendInvitationToFriend(User $userSender, User $userReceiver, string $messageTitle, string $messageContent): bool
@ -120,10 +123,10 @@ class MessageRepository extends ServiceEntityRepository
$existingInvitations = $this->findSentInvitationsByUserAndStatus($userSender, $userReceiver, [
Message::MESSAGE_STATUS_INVITATION_PENDING,
Message::MESSAGE_STATUS_INVITATION_ACCEPTED,
Message::MESSAGE_STATUS_INVITATION_DENIED
Message::MESSAGE_STATUS_INVITATION_DENIED,
]);
if (count($existingInvitations) > 0) {
if (\count($existingInvitations) > 0) {
// Invitation already exists
return false;
}
@ -132,7 +135,7 @@ class MessageRepository extends ServiceEntityRepository
$message->setSender($userSender);
$message->setMsgType(Message::MESSAGE_TYPE_INVITATION);
$message->setStatus(Message::MESSAGE_STATUS_INVITATION_PENDING);
$message->setSendDate(new \DateTime());
$message->setSendDate(new DateTime());
$message->setTitle($messageTitle);
$message->setContent(nl2br($messageContent));
@ -161,7 +164,8 @@ class MessageRepository extends ServiceEntityRepository
'receiver' => $userReceiver,
'msgType' => Message::MESSAGE_TYPE_INVITATION,
'statuses' => $statuses,
]);
])
;
return $qb->getQuery()->getResult();
}
@ -175,20 +179,22 @@ class MessageRepository extends ServiceEntityRepository
->where('m.sender = :sender')
->andWhere('m.status = :status')
->setParameter('sender', $sender)
->setParameter('status', Message::MESSAGE_STATUS_INVITATION_PENDING);
->setParameter('status', Message::MESSAGE_STATUS_INVITATION_PENDING)
;
$messages = $queryBuilder->getQuery()->getResult();
foreach ($messages as $message) {
$messageRelUser = $this->_em->getRepository(MessageRelUser::class)->findOneBy([
'message' => $message,
'receiver' => $receiver
'receiver' => $receiver,
]);
if ($messageRelUser) {
$invitation = $messageRelUser->getMessage();
$invitation->setStatus(Message::MESSAGE_STATUS_INVITATION_ACCEPTED);
$this->_em->flush();
return true;
}
}
@ -196,7 +202,6 @@ class MessageRepository extends ServiceEntityRepository
return false;
}
public function invitationDenied(User $sender, User $receiver): bool
{
$queryBuilder = $this->_em->createQueryBuilder();
@ -206,24 +211,25 @@ class MessageRepository extends ServiceEntityRepository
->where('m.sender = :sender')
->andWhere('m.status = :status')
->setParameter('sender', $sender)
->setParameter('status', Message::MESSAGE_STATUS_INVITATION_PENDING);
->setParameter('status', Message::MESSAGE_STATUS_INVITATION_PENDING)
;
$messages = $queryBuilder->getQuery()->getResult();
foreach ($messages as $message) {
$messageRelUser = $this->_em->getRepository(MessageRelUser::class)->findOneBy([
'message' => $message,
'receiver' => $receiver
'receiver' => $receiver,
]);
if ($messageRelUser) {
$this->_em->remove($messageRelUser);
$this->_em->flush();
return true;
}
}
return false;
}
}

@ -39,17 +39,17 @@ use const MB_CASE_LOWER;
class UserRepository extends ResourceRepository implements PasswordUpgraderInterface
{
protected ?UserPasswordHasherInterface $hasher = null;
private $illustrationRepository;
const USER_IMAGE_SIZE_SMALL = 1;
const USER_IMAGE_SIZE_MEDIUM = 2;
const USER_IMAGE_SIZE_BIG = 3;
const USER_IMAGE_SIZE_ORIGINAL = 4;
public const USER_IMAGE_SIZE_SMALL = 1;
public const USER_IMAGE_SIZE_MEDIUM = 2;
public const USER_IMAGE_SIZE_BIG = 3;
public const USER_IMAGE_SIZE_ORIGINAL = 4;
public function __construct(ManagerRegistry $registry, IllustrationRepository $illustrationRepository)
{
public function __construct(
ManagerRegistry $registry,
private readonly IllustrationRepository $illustrationRepository
) {
parent::__construct($registry, User::class);
$this->illustrationRepository = $illustrationRepository;
}
public function loadUserByIdentifier(string $identifier): ?User
@ -655,7 +655,8 @@ class UserRepository extends ResourceRepository implements PasswordUpgraderInter
->leftJoin(ExtraFieldValues::class, 'efv', Join::WITH, 'efv.field = ef.id AND efv.itemId = :userId')
->where('ef.itemType = :itemType')
->setParameter('userId', $userId)
->setParameter('itemType', ExtraField::USER_FIELD_TYPE);
->setParameter('itemType', ExtraField::USER_FIELD_TYPE)
;
// Apply visibility filters
if (!$allVisibility) {
@ -665,7 +666,8 @@ class UserRepository extends ResourceRepository implements PasswordUpgraderInter
// Apply field filter if provided
if (null !== $fieldFilter) {
$qb->andWhere('ef.id = :fieldFilter')
->setParameter('fieldFilter', $fieldFilter);
->setParameter('fieldFilter', $fieldFilter)
;
}
// Order by field order
@ -680,17 +682,17 @@ class UserRepository extends ResourceRepository implements PasswordUpgraderInter
$value = $row['fval'] ?? $row['fval_df'];
// Handle multiple values if necessary
if ($splitMultiple && in_array($row['type'], [ExtraField::USER_FIELD_TYPE_SELECT_MULTIPLE], true)) {
if ($splitMultiple && \in_array($row['type'], [ExtraField::USER_FIELD_TYPE_SELECT_MULTIPLE], true)) {
$value = explode(';', $value);
}
// Handle prefix if needed
$key = $prefix ? 'extra_' . $row['fvar'] : $row['fvar'];
$key = $prefix ? 'extra_'.$row['fvar'] : $row['fvar'];
// Special handling for certain field types
if ($row['type'] == ExtraField::USER_FIELD_TYPE_TAG) {
if (ExtraField::USER_FIELD_TYPE_TAG == $row['type']) {
// Implement your logic to handle tags
} elseif ($row['type'] == ExtraField::USER_FIELD_TYPE_RADIO && $prefix) {
} elseif (ExtraField::USER_FIELD_TYPE_RADIO == $row['type'] && $prefix) {
$extraData[$key][$key] = $value;
} else {
$extraData[$key] = $value;
@ -714,7 +716,8 @@ class UserRepository extends ResourceRepository implements PasswordUpgraderInter
'userId' => $userId,
'fieldVariable' => $fieldVariable,
'itemType' => ExtraField::USER_FIELD_TYPE,
]);
])
;
if (!$allVisibility) {
$qb->andWhere('e.visibleToSelf = true');
@ -739,7 +742,7 @@ class UserRepository extends ResourceRepository implements PasswordUpgraderInter
public function searchUsersByTags(
string $tag,
int $excludeUserId = null,
?int $excludeUserId = null,
int $fieldId = 0,
int $from = 0,
int $number_of_items = 10,
@ -755,16 +758,19 @@ class UserRepository extends ResourceRepository implements PasswordUpgraderInter
$qb->innerJoin('u.portals', 'urlRelUser')
->leftJoin(UserRelTag::class, 'uv', 'WITH', 'u = uv.user')
->leftJoin(Tag::class, 'ut', 'WITH', 'uv.tag = ut');
->leftJoin(Tag::class, 'ut', 'WITH', 'uv.tag = ut')
;
if ($fieldId !== 0) {
if (0 !== $fieldId) {
$qb->andWhere('ut.field = :fieldId')
->setParameter('fieldId', $fieldId);
->setParameter('fieldId', $fieldId)
;
}
if ($excludeUserId !== null) {
if (null !== $excludeUserId) {
$qb->andWhere('u.id != :excludeUserId')
->setParameter('excludeUserId', $excludeUserId);
->setParameter('excludeUserId', $excludeUserId)
;
}
$qb->andWhere(
@ -783,19 +789,22 @@ class UserRepository extends ResourceRepository implements PasswordUpgraderInter
)
)
)
->setParameter('tag', $tag . '%')
->setParameter('likeTag', '%' . $tag . '%');
->setParameter('tag', $tag.'%')
->setParameter('likeTag', '%'.$tag.'%')
;
// Only active users and not anonymous
$qb->andWhere('u.active = :active')
->andWhere('u.status != :anonymous')
->setParameter('active', true)
->setParameter('anonymous', 6);
->setParameter('anonymous', 6)
;
if (!$getCount) {
$qb->orderBy('u.username')
->setFirstResult($from)
->setMaxResults($number_of_items);
->setMaxResults($number_of_items)
;
}
return $getCount ? $qb->getQuery()->getSingleScalarResult() : $qb->getQuery()->getResult();
@ -810,11 +819,10 @@ class UserRepository extends ResourceRepository implements PasswordUpgraderInter
->where('u.id = :userId AND f.id = :friendId')
->setParameter('userId', $userId)
->setParameter('friendId', $friendId)
->setMaxResults(1);
$result = $qb->getQuery()->getOneOrNullResult();
->setMaxResults(1)
;
return $result;
return $qb->getQuery()->getOneOrNullResult();
}
public function relateUsers(User $user1, User $user2, int $relationType): void
@ -859,26 +867,31 @@ class UserRepository extends ResourceRepository implements PasswordUpgraderInter
int $size = self::USER_IMAGE_SIZE_MEDIUM,
$addRandomId = true,
) {
$user = $this->find($userId);
if (!$user) {
return '/img/icons/64/unknown.png';
}
switch ($size) {
case self::USER_IMAGE_SIZE_SMALL:
$width = 32;
break;
case self::USER_IMAGE_SIZE_MEDIUM:
$width = 64;
break;
case self::USER_IMAGE_SIZE_BIG:
$width = 128;
break;
case self::USER_IMAGE_SIZE_ORIGINAL:
default:
$width = 0;
break;
}

@ -15,12 +15,11 @@ use Exception;
class UsergroupRepository extends ResourceRepository
{
private $illustrationRepository;
public function __construct(ManagerRegistry $registry, IllustrationRepository $illustrationRepository)
{
public function __construct(
ManagerRegistry $registry,
private readonly IllustrationRepository $illustrationRepository
) {
parent::__construct($registry, Usergroup::class);
$this->illustrationRepository = $illustrationRepository;
}
/**
@ -193,14 +192,13 @@ class UsergroupRepository extends ResourceRepository
'user' => $user,
]);
if (!$existingRelation) {
$existingRelation = new UsergroupRelUser();
$existingRelation->setUsergroup($group);
$existingRelation->setUser($user);
}
if ($group->getVisibility() === Usergroup::GROUP_PERMISSION_CLOSED) {
if (Usergroup::GROUP_PERMISSION_CLOSED === $group->getVisibility()) {
$relationType = Usergroup::GROUP_USER_PERMISSION_PENDING_INVITATION;
}
@ -212,7 +210,7 @@ class UsergroupRepository extends ResourceRepository
public function removeUserFromGroup(int $userId, int $groupId): bool
{
/* @var Usergroup $group */
/** @var Usergroup $group */
$group = $this->find($groupId);
$user = $this->_em->getRepository(User::class)->find($userId);
@ -283,7 +281,8 @@ class UsergroupRepository extends ResourceRepository
$urlId = $this->getCurrentAccessUrlId();
$qb->innerJoin('g.accessUrls', 'a', 'WITH', 'g.id = a.usergroup')
->andWhere('a.accessUrl = :urlId')
->setParameter('urlId', $urlId);
->setParameter('urlId', $urlId)
;
}
$qb->where(
@ -293,12 +292,14 @@ class UsergroupRepository extends ResourceRepository
$qb->expr()->like('g.url', ':tag')
)
)
->setParameter('tag', '%' . $tag . '%');
->setParameter('tag', '%'.$tag.'%')
;
if (!$getCount) {
$qb->orderBy('g.title', 'ASC')
->setFirstResult($from)
->setMaxResults($number_of_items);
->setMaxResults($number_of_items)
;
}
return $getCount ? $qb->getQuery()->getSingleScalarResult() : $qb->getQuery()->getResult();
@ -306,10 +307,8 @@ class UsergroupRepository extends ResourceRepository
public function getUsergroupPicture($userGroupId): string
{
$usergroup = $this->find($userGroupId);
if (!$usergroup) {
return '/img/icons/64/group_na.png';
}
@ -336,7 +335,7 @@ class UsergroupRepository extends ResourceRepository
Usergroup::GROUP_USER_PERMISSION_HRM,
];
return in_array($userRole, $allowedRoles, true);
return \in_array($userRole, $allowedRoles, true);
}
public function getUserGroupRole(int $groupId, int $userId): ?int
@ -346,9 +345,11 @@ class UsergroupRepository extends ResourceRepository
->where('g.id = :groupId AND gu.user = :userId')
->setParameter('groupId', $groupId)
->setParameter('userId', $userId)
->select('gu.relationType');
->select('gu.relationType')
;
$result = $qb->getQuery()->getOneOrNullResult();
return $result ? $result['relationType'] : null;
}
@ -356,7 +357,7 @@ class UsergroupRepository extends ResourceRepository
{
$relationType = $this->getUserGroupRole($groupId, $userId);
return in_array($relationType, [
return \in_array($relationType, [
Usergroup::GROUP_USER_PERMISSION_ADMIN,
Usergroup::GROUP_USER_PERMISSION_MODERATOR,
]);

@ -8,18 +8,18 @@ namespace Chamilo\CoreBundle\Repository;
use Chamilo\CoreBundle\Entity\TrackEOnline;
use Chamilo\CoreBundle\Settings\SettingsManager;
use DateTime;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\NonUniqueResultException;
use Doctrine\Persistence\ManagerRegistry;
class TrackEOnlineRepository extends ServiceEntityRepository
{
private $settingsManager;
public function __construct(ManagerRegistry $registry, SettingsManager $settingsManager)
{
public function __construct(
ManagerRegistry $registry,
private readonly SettingsManager $settingsManager
) {
parent::__construct($registry, TrackEOnline::class);
$this->settingsManager = $settingsManager;
}
public function isUserOnline(int $userId): bool
@ -27,7 +27,7 @@ class TrackEOnlineRepository extends ServiceEntityRepository
$accessUrlId = 1;
$timeLimit = $this->settingsManager->getSetting('display.time_limit_whosonline');
$onlineTime = new \DateTime();
$onlineTime = new DateTime();
$onlineTime->modify("-{$timeLimit} minutes");
$qb = $this->createQueryBuilder('t')
@ -38,10 +38,12 @@ class TrackEOnlineRepository extends ServiceEntityRepository
->setParameter('userId', $userId)
->setParameter('accessUrlId', $accessUrlId)
->setParameter('limitDate', $onlineTime)
->setMaxResults(1);
->setMaxResults(1)
;
try {
$count = $qb->getQuery()->getSingleScalarResult();
return $count > 0;
} catch (NonUniqueResultException $e) {
// Handle exception

Loading…
Cancel
Save