From dcb76725fd1ca2bed0eec8c2db6dc7aa8c79f65f Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Fri, 13 Sep 2024 15:54:48 +0300 Subject: [PATCH] no distinct --- .../Select/Team/BoolFilters/OnlyMy.php | 37 +++++++-------- .../Select/User/BoolFilters/OnlyMyTeam.php | 46 +++++++++---------- 2 files changed, 38 insertions(+), 45 deletions(-) diff --git a/application/Espo/Classes/Select/Team/BoolFilters/OnlyMy.php b/application/Espo/Classes/Select/Team/BoolFilters/OnlyMy.php index b978901b5c..0458b20ee5 100644 --- a/application/Espo/Classes/Select/Team/BoolFilters/OnlyMy.php +++ b/application/Espo/Classes/Select/Team/BoolFilters/OnlyMy.php @@ -29,35 +29,32 @@ namespace Espo\Classes\Select\Team\BoolFilters; +use Espo\Entities\Team; use Espo\Entities\User; - use Espo\Core\Select\Bool\Filter; +use Espo\ORM\Query\Part\Condition; +use Espo\ORM\Query\Part\Expression; +use Espo\ORM\Query\Part\Where\OrGroupBuilder; +use Espo\ORM\Query\SelectBuilder; -use Espo\ORM\Query\{ - SelectBuilder, - Part\Where\OrGroupBuilder, - Part\Condition as Cond, -}; - +/** + * @noinspection PhpUnused + */ class OnlyMy implements Filter { - private $user; - - public function __construct(User $user) - { - $this->user = $user; - } + public function __construct(private User $user) + {} public function apply(SelectBuilder $queryBuilder, OrGroupBuilder $orGroupBuilder): void { - $queryBuilder - ->leftJoin('users', 'usersOnlyMyFilter') - ->distinct(); - $orGroupBuilder->add( - Cond::equal( - Cond::column('usersOnlyMyFilter.id'), - $this->user->getId() + Condition::in( + Expression::column('id'), + SelectBuilder::create() + ->from(Team::RELATIONSHIP_TEAM_USER) + ->select('teamId') + ->where(['userId' => $this->user->getId()]) + ->build() ) ); } diff --git a/application/Espo/Classes/Select/User/BoolFilters/OnlyMyTeam.php b/application/Espo/Classes/Select/User/BoolFilters/OnlyMyTeam.php index bd77b5ba99..ab114762cd 100644 --- a/application/Espo/Classes/Select/User/BoolFilters/OnlyMyTeam.php +++ b/application/Espo/Classes/Select/User/BoolFilters/OnlyMyTeam.php @@ -29,48 +29,44 @@ namespace Espo\Classes\Select\User\BoolFilters; +use Espo\Entities\Team; use Espo\Entities\User; - use Espo\Core\Select\Bool\Filter; +use Espo\ORM\Query\Part\Condition; +use Espo\ORM\Query\Part\Expression; +use Espo\ORM\Query\Part\Where\OrGroupBuilder; +use Espo\ORM\Query\Part\WhereClause; +use Espo\ORM\Query\SelectBuilder; -use Espo\ORM\Query\{ - SelectBuilder, - Part\Where\OrGroupBuilder, - Part\WhereClause, -}; - +/** + * @noinspection PhpUnused + */ class OnlyMyTeam implements Filter { - private $user; - - public function __construct(User $user) - { - $this->user = $user; - } + public function __construct(private User $user) + {} public function apply(SelectBuilder $queryBuilder, OrGroupBuilder $orGroupBuilder): void { - /** @var string[] $teamIdList */ - $teamIdList = $this->user->getLinkMultipleIdList('teams'); + $teamIdList = $this->user->getTeamIdList(); if (count($teamIdList) === 0) { $orGroupBuilder->add( - WhereClause::fromRaw([ - 'id' => null, - ]) + WhereClause::fromRaw(['id' => null]) ); return; } - $queryBuilder - ->leftJoin('teams', 'teamsOnlyMyFilter') - ->distinct(); - $orGroupBuilder->add( - WhereClause::fromRaw([ - 'teamsOnlyMyFilter.id' => $teamIdList - ]) + Condition::in( + Expression::column('id'), + SelectBuilder::create() + ->from(Team::RELATIONSHIP_TEAM_USER) + ->select('userId') + ->where(['teamId' => $teamIdList]) + ->build() + ) ); } }