diff --git a/application/Espo/Core/Acl/Cache/Clearer.php b/application/Espo/Core/Acl/Cache/Clearer.php index 3b053f97a7..61674923f0 100644 --- a/application/Espo/Core/Acl/Cache/Clearer.php +++ b/application/Espo/Core/Acl/Cache/Clearer.php @@ -33,6 +33,7 @@ use Espo\Core\Utils\File\Manager as FileManager; use Espo\Entities\Portal; use Espo\Entities\User; use Espo\ORM\EntityManager; +use Espo\ORM\Name\Attribute; /** * @todo Clear cache in AclManager. @@ -72,7 +73,7 @@ class Clearer { $portals = $this->entityManager ->getRDBRepositoryByClass(Portal::class) - ->select('id') + ->select(Attribute::ID) ->find(); foreach ($portals as $portal) { diff --git a/application/Espo/Core/Acl/DefaultAssignmentChecker.php b/application/Espo/Core/Acl/DefaultAssignmentChecker.php index b77538050d..d7bf408a18 100644 --- a/application/Espo/Core/Acl/DefaultAssignmentChecker.php +++ b/application/Espo/Core/Acl/DefaultAssignmentChecker.php @@ -33,6 +33,7 @@ use Espo\Core\Name\Field; use Espo\Core\ORM\Entity as CoreEntity; use Espo\Core\ORM\Type\FieldType; use Espo\Core\Utils\Metadata; +use Espo\ORM\Name\Attribute; use Espo\Repositories\User as UserRepository; use Espo\ORM\Defs; use Espo\ORM\Entity; @@ -206,7 +207,7 @@ class DefaultAssignmentChecker implements AssignmentChecker $teamCollection = $this->entityManager ->getRDBRepository($entity->getEntityType()) ->getRelation($entity, self::FIELD_TEAMS) - ->select('id') + ->select(Attribute::ID) ->find(); foreach ($teamCollection as $team) { @@ -364,7 +365,7 @@ class DefaultAssignmentChecker implements AssignmentChecker User::TYPE_REGULAR, User::TYPE_ADMIN, ], - 'id' => $ids, + Attribute::ID => $ids, ]) ->count(); diff --git a/application/Espo/Core/ApplicationUser.php b/application/Espo/Core/ApplicationUser.php index 2eb79b1177..64b9296129 100644 --- a/application/Espo/Core/ApplicationUser.php +++ b/application/Espo/Core/ApplicationUser.php @@ -33,6 +33,7 @@ use Espo\Core\Utils\SystemUser; use Espo\Entities\User; use Espo\Core\ORM\EntityManagerProxy; +use Espo\ORM\Name\Attribute; use RuntimeException; /** @@ -56,14 +57,14 @@ class ApplicationUser $user = $this->entityManagerProxy ->getRDBRepository(User::ENTITY_TYPE) ->select([ - 'id', + Attribute::ID, 'name', 'userName', 'type', 'isActive', 'firstName', 'lastName', - 'deleted', + Attribute::DELETED, ]) ->where(['userName' => SystemUser::NAME]) ->findOne(); diff --git a/application/Espo/Core/Field/LinkMultiple/LinkMultipleFactory.php b/application/Espo/Core/Field/LinkMultiple/LinkMultipleFactory.php index 521394337a..c9eb7c92c0 100644 --- a/application/Espo/Core/Field/LinkMultiple/LinkMultipleFactory.php +++ b/application/Espo/Core/Field/LinkMultiple/LinkMultipleFactory.php @@ -33,6 +33,7 @@ use Espo\Core\ORM\Type\FieldType; use Espo\ORM\Defs; use Espo\ORM\Entity; use Espo\ORM\EntityManager; +use Espo\ORM\Name\Attribute; use Espo\ORM\Value\ValueFactory; use Espo\Core\Field\LinkMultiple; @@ -121,7 +122,7 @@ class LinkMultipleFactory implements ValueFactory $columnData = (object) []; - $select = ['id']; + $select = [Attribute::ID]; $entityDefs = $this->ormDefs->getEntity($entity->getEntityType()); diff --git a/application/Espo/Core/Job/JobRunner.php b/application/Espo/Core/Job/JobRunner.php index 2e91c2e7bf..12b600f9f9 100644 --- a/application/Espo/Core/Job/JobRunner.php +++ b/application/Espo/Core/Job/JobRunner.php @@ -37,6 +37,7 @@ use Espo\Core\Job\Job\Data; use Espo\Core\Job\Job\Status; use Espo\Entities\Job as JobEntity; +use Espo\ORM\Name\Attribute; use LogicException; use RuntimeException; use Throwable; @@ -133,7 +134,7 @@ class JobRunner $this->log->critical("Failed job {id}. {message}", [ 'exception' => $e, 'message' => $e->getMessage(), - 'id' => $jobId, + Attribute::ID => $jobId, ]); if ($throwException) { diff --git a/application/Espo/Core/Job/JobTask.php b/application/Espo/Core/Job/JobTask.php index 70cf066dee..325001c0cd 100644 --- a/application/Espo/Core/Job/JobTask.php +++ b/application/Espo/Core/Job/JobTask.php @@ -29,6 +29,7 @@ namespace Espo\Core\Job; +use Espo\ORM\Name\Attribute; use Spatie\Async\Task as AsyncTask; use Espo\Core\Application; @@ -60,7 +61,7 @@ class JobTask extends AsyncTask { $app = new Application(); - $params = RunnerParams::create()->with('id', $this->jobId); + $params = RunnerParams::create()->with(Attribute::ID, $this->jobId); try { $app->run(JobRunner::class, $params); diff --git a/application/Espo/Core/Job/Preparator/CollectionHelper.php b/application/Espo/Core/Job/Preparator/CollectionHelper.php index 32ac79fd72..91a17f6fdd 100644 --- a/application/Espo/Core/Job/Preparator/CollectionHelper.php +++ b/application/Espo/Core/Job/Preparator/CollectionHelper.php @@ -37,6 +37,7 @@ use Espo\ORM\Entity; use Espo\ORM\EntityManager; use DateTimeImmutable; +use Espo\ORM\Name\Attribute; /** * Creates jobs for each entity of a collection. @@ -66,7 +67,7 @@ class CollectionHelper { $running = $this->entityManager ->getRDBRepository(Job::ENTITY_TYPE) - ->select('id') + ->select(Attribute::ID) ->where([ 'scheduledJobId' => $data->getId(), 'status' => [ diff --git a/application/Espo/Core/Job/Preparator/Preparators/ProcessJobGroupPreparator.php b/application/Espo/Core/Job/Preparator/Preparators/ProcessJobGroupPreparator.php index 7b5724bae0..9693a6893b 100644 --- a/application/Espo/Core/Job/Preparator/Preparators/ProcessJobGroupPreparator.php +++ b/application/Espo/Core/Job/Preparator/Preparators/ProcessJobGroupPreparator.php @@ -39,6 +39,7 @@ use Espo\ORM\EntityManager; use Espo\Entities\Job as JobEntity; use DateTimeImmutable; +use Espo\ORM\Name\Attribute; class ProcessJobGroupPreparator implements Preparator { @@ -81,7 +82,7 @@ class ProcessJobGroupPreparator implements Preparator foreach ($groupList as $group) { $existingJob = $this->entityManager ->getRDBRepository(JobEntity::ENTITY_TYPE) - ->select('id') + ->select(Attribute::ID) ->where([ 'scheduledJobId' => $data->getId(), 'targetGroup' => $group, diff --git a/application/Espo/Core/Job/QueueUtil.php b/application/Espo/Core/Job/QueueUtil.php index 89ba466c4a..af70e1680f 100644 --- a/application/Espo/Core/Job/QueueUtil.php +++ b/application/Espo/Core/Job/QueueUtil.php @@ -39,6 +39,7 @@ use Espo\Entities\Job as JobEntity; use Espo\ORM\Collection; use DateTime; +use Espo\ORM\Name\Attribute; use Exception; use LogicException; @@ -59,8 +60,8 @@ class QueueUtil /** @var ?JobEntity $job */ $job = $this->entityManager ->getRDBRepositoryByClass(JobEntity::class) - ->select(['id', 'status']) - ->where(['id' => $id]) + ->select([Attribute::ID, 'status']) + ->where([Attribute::ID => $id]) ->forUpdate() ->findOne(); @@ -83,7 +84,7 @@ class QueueUtil $builder = $this->entityManager ->getRDBRepositoryByClass(JobEntity::class) ->select([ - 'id', + Attribute::ID, 'scheduledJobId', 'scheduledJobJob', 'executeTime', @@ -137,7 +138,7 @@ class QueueUtil return (bool) $this->entityManager ->getRDBRepositoryByClass(JobEntity::class) - ->select(['id']) + ->select([Attribute::ID]) ->where($where) ->findOne(); } @@ -190,7 +191,7 @@ class QueueUtil $job = $this->entityManager ->getRDBRepositoryByClass(JobEntity::class) - ->select(['id']) + ->select([Attribute::ID]) ->where([ 'scheduledJobId' => $scheduledJobId, 'status' => [ // This forces usage of an appropriate index. @@ -238,7 +239,7 @@ class QueueUtil $runningJobList = $this->entityManager ->getRDBRepositoryByClass(JobEntity::class) ->select([ - 'id', + Attribute::ID, 'scheduledJobId', 'executeTime', 'targetId', @@ -275,7 +276,7 @@ class QueueUtil $failedJobList = $this->entityManager ->getRDBRepositoryByClass(JobEntity::class) ->select([ - 'id', + Attribute::ID, 'scheduledJobId', 'executeTime', 'targetId', @@ -307,7 +308,7 @@ class QueueUtil $runningJobList = $this->entityManager ->getRDBRepositoryByClass(JobEntity::class) ->select([ - 'id', + Attribute::ID, 'scheduledJobId', 'executeTime', 'targetId', @@ -364,7 +365,7 @@ class QueueUtil 'attempts' => 0, ]) ->where([ - 'id' => $jobIdList, + Attribute::ID => $jobIdList, ]) ->build(); @@ -425,7 +426,7 @@ class QueueUtil foreach ($scheduledJobIdList as $scheduledJobId) { $toRemoveJobList = $this->entityManager ->getRDBRepositoryByClass(JobEntity::class) - ->select(['id']) + ->select([Attribute::ID]) ->where([ 'scheduledJobId' => $scheduledJobId, 'status' => Status::PENDING, @@ -448,7 +449,7 @@ class QueueUtil ->getQueryBuilder() ->delete() ->from(JobEntity::ENTITY_TYPE) - ->where(['id' => $jobIdList]) + ->where([Attribute::ID => $jobIdList]) ->build(); $this->entityManager->getQueryExecutor()->execute($delete); @@ -463,7 +464,7 @@ class QueueUtil $jobCollection = $this->entityManager ->getRDBRepositoryByClass(JobEntity::class) ->select([ - 'id', + Attribute::ID, 'attempts', 'failedAttempts', ]) diff --git a/application/Espo/Core/Job/ScheduleUtil.php b/application/Espo/Core/Job/ScheduleUtil.php index 41611a072f..47b21e5995 100644 --- a/application/Espo/Core/Job/ScheduleUtil.php +++ b/application/Espo/Core/Job/ScheduleUtil.php @@ -35,6 +35,7 @@ use Espo\ORM\Collection; use Espo\ORM\EntityManager; use Espo\Entities\ScheduledJob as ScheduledJobEntity; use Espo\Entities\ScheduledJobLogRecord as ScheduledJobLogRecordEntity; +use Espo\ORM\Name\Attribute; class ScheduleUtil { @@ -52,7 +53,7 @@ class ScheduleUtil $collection = $this->entityManager ->getRDBRepository(ScheduledJobEntity::ENTITY_TYPE) ->select([ - 'id', + Attribute::ID, 'scheduling', 'job', 'name', diff --git a/application/Espo/Core/Mail/Account/GroupAccount/Account.php b/application/Espo/Core/Mail/Account/GroupAccount/Account.php index c4f7a0bf34..78b19b8cc7 100644 --- a/application/Espo/Core/Mail/Account/GroupAccount/Account.php +++ b/application/Espo/Core/Mail/Account/GroupAccount/Account.php @@ -49,6 +49,7 @@ use Espo\ORM\EntityManager; use Espo\Core\Mail\Account\Account as AccountInterface; use Espo\Core\Mail\Account\FetchData; +use Espo\ORM\Name\Attribute; use RuntimeException; class Account implements AccountInterface @@ -160,7 +161,7 @@ class Account implements AccountInterface $users = $this->entityManager ->getRDBRepositoryByClass(User::class) - ->select(['id']) + ->select([Attribute::ID]) ->distinct() ->join(Field::TEAMS) ->where([ diff --git a/application/Espo/Core/Mail/Account/GroupAccount/StorageFactory.php b/application/Espo/Core/Mail/Account/GroupAccount/StorageFactory.php index 13560d1ac0..af3adb60f8 100644 --- a/application/Espo/Core/Mail/Account/GroupAccount/StorageFactory.php +++ b/application/Espo/Core/Mail/Account/GroupAccount/StorageFactory.php @@ -39,6 +39,7 @@ use Espo\Core\Mail\Mail\Storage\Imap; use Espo\Core\Utils\Log; use Espo\Core\InjectableFactory; +use Espo\ORM\Name\Attribute; use Laminas\Mail\Storage\Exception\RuntimeException; use Laminas\Mail\Storage\Exception\InvalidArgumentException; use Laminas\Mail\Protocol\Exception\RuntimeException as ProtocolRuntimeException; @@ -81,7 +82,7 @@ class StorageFactory implements StorageFactoryInterface 'username' => $params->getUsername(), 'password' => $params->getPassword(), 'imapHandler' => $params->getImapHandlerClassName(), - 'id' => $params->getId(), + Attribute::ID => $params->getId(), ]; if ($params->getSecurity()) { diff --git a/application/Espo/Core/Mail/Account/PersonalAccount/StorageFactory.php b/application/Espo/Core/Mail/Account/PersonalAccount/StorageFactory.php index 6fe9ec77b0..3625b7f554 100644 --- a/application/Espo/Core/Mail/Account/PersonalAccount/StorageFactory.php +++ b/application/Espo/Core/Mail/Account/PersonalAccount/StorageFactory.php @@ -39,6 +39,7 @@ use Espo\Core\Mail\Account\Storage\LaminasStorage; use Espo\Core\Utils\Log; use Espo\Core\InjectableFactory; use Espo\Entities\UserData; +use Espo\ORM\Name\Attribute; use Espo\Repositories\UserData as UserDataRepository; use Espo\ORM\EntityManager; @@ -97,7 +98,7 @@ class StorageFactory implements StorageFactoryInterface 'emailAddress' => $params->getEmailAddress(), 'userId' => $params->getUserId(), 'imapHandler' => $params->getImapHandlerClassName(), - 'id' => $params->getId(), + Attribute::ID => $params->getId(), ]; if ($params->getSecurity()) { diff --git a/application/Espo/Core/Mail/Account/SendingAccountProvider.php b/application/Espo/Core/Mail/Account/SendingAccountProvider.php index 6b27e65ee3..6e655435e8 100644 --- a/application/Espo/Core/Mail/Account/SendingAccountProvider.php +++ b/application/Espo/Core/Mail/Account/SendingAccountProvider.php @@ -40,6 +40,7 @@ use Espo\Entities\EmailAccount as EmailAccountEntity; use Espo\Entities\InboundEmail as InboundEmailEntity; use Espo\Entities\User; use Espo\ORM\EntityManager; +use Espo\ORM\Name\Attribute; use Espo\ORM\Query\Part\Condition; use Espo\ORM\Query\Part\Expression; use RuntimeException; @@ -73,7 +74,7 @@ class SendingAccountProvider $entity = $this->entityManager ->getRDBRepositoryByClass(InboundEmailEntity::class) - ->select(['id']) + ->select([Attribute::ID]) ->distinct() ->join(Field::TEAMS) ->where([ @@ -96,7 +97,7 @@ class SendingAccountProvider if ($level === Table::LEVEL_ALL) { $entity = $this->entityManager ->getRDBRepositoryByClass(InboundEmailEntity::class) - ->select(['id']) + ->select([Attribute::ID]) ->where([ 'status' => InboundEmailEntity::STATUS_ACTIVE, 'useSmtp' => true, @@ -128,7 +129,7 @@ class SendingAccountProvider { $entity = $this->entityManager ->getRDBRepositoryByClass(InboundEmailEntity::class) - ->select(['id']) + ->select([Attribute::ID]) ->where([ 'status' => InboundEmailEntity::STATUS_ACTIVE, 'useSmtp' => true, @@ -170,7 +171,7 @@ class SendingAccountProvider $entity = $this->entityManager ->getRDBRepositoryByClass(EmailAccountEntity::class) - ->select(['id']) + ->select([Attribute::ID]) ->where([ 'assignedUserId' => $user->getId(), 'status' => EmailAccountEntity::STATUS_ACTIVE, diff --git a/application/Espo/Core/Mail/Account/Util/NotificationHelper.php b/application/Espo/Core/Mail/Account/Util/NotificationHelper.php index f4eb7086db..ea91349c22 100644 --- a/application/Espo/Core/Mail/Account/Util/NotificationHelper.php +++ b/application/Espo/Core/Mail/Account/Util/NotificationHelper.php @@ -37,6 +37,7 @@ use Espo\Entities\InboundEmail; use Espo\Entities\Notification; use Espo\Entities\User; use Espo\ORM\EntityManager; +use Espo\ORM\Name\Attribute; class NotificationHelper { @@ -128,7 +129,7 @@ class NotificationHelper { $users = $this->entityManager ->getRDBRepositoryByClass(User::class) - ->select(['id']) + ->select([Attribute::ID]) ->where([ 'isActive' => true, 'type' => User::TYPE_ADMIN, diff --git a/application/Espo/Core/Mail/Importer/DefaultDuplicateFinder.php b/application/Espo/Core/Mail/Importer/DefaultDuplicateFinder.php index 777c50b86c..927a1c198b 100644 --- a/application/Espo/Core/Mail/Importer/DefaultDuplicateFinder.php +++ b/application/Espo/Core/Mail/Importer/DefaultDuplicateFinder.php @@ -32,6 +32,7 @@ namespace Espo\Core\Mail\Importer; use Espo\Core\Mail\Message; use Espo\Entities\Email; use Espo\ORM\EntityManager; +use Espo\ORM\Name\Attribute; class DefaultDuplicateFinder implements DuplicateFinder { @@ -46,7 +47,7 @@ class DefaultDuplicateFinder implements DuplicateFinder return $this->entityManager ->getRDBRepositoryByClass(Email::class) - ->select(['id', 'status']) + ->select([Attribute::ID, 'status']) ->where([ 'messageId' => $email->getMessageId(), ]) diff --git a/application/Espo/Core/Mail/Importer/DefaultImporter.php b/application/Espo/Core/Mail/Importer/DefaultImporter.php index b96e6702b4..3966e4f42f 100644 --- a/application/Espo/Core/Mail/Importer/DefaultImporter.php +++ b/application/Espo/Core/Mail/Importer/DefaultImporter.php @@ -56,6 +56,7 @@ use Espo\Entities\EmailFilter; use Espo\Entities\GroupEmailFolder; use Espo\Entities\Team; use Espo\Entities\User; +use Espo\ORM\Name\Attribute; use Espo\ORM\Query\Part\Condition; use Espo\ORM\Query\Part\Expression; use Espo\ORM\Query\SelectBuilder; @@ -596,7 +597,7 @@ class DefaultImporter implements Importer $this->entityManager ->getRDBRepositoryByClass(Email::class) ->forUpdate() - ->where(['id' => $email->getId()]) + ->where([Attribute::ID => $email->getId()]) ->findOne(); $this->entityManager->saveEntity($email, [Email::SAVE_OPTION_IS_BEING_IMPORTED => true]); @@ -670,15 +671,15 @@ class DefaultImporter implements Importer $users = $this->entityManager ->getRDBRepositoryByClass(User::class) - ->select(['id']) + ->select([Attribute::ID]) ->where([ 'type' => [User::TYPE_REGULAR, User::TYPE_ADMIN], 'isActive' => true, - 'id!=' => $fetchedUserIds, + Attribute::ID . '!=' => $fetchedUserIds, ]) ->where( Condition::in( - Expression::column('id'), + Expression::column(Attribute::ID), SelectBuilder::create() ->from(Team::RELATIONSHIP_TEAM_USER) ->select('userId') diff --git a/application/Espo/Core/Name/Field.php b/application/Espo/Core/Name/Field.php index 40828b10a6..6213bfda07 100644 --- a/application/Espo/Core/Name/Field.php +++ b/application/Espo/Core/Name/Field.php @@ -31,6 +31,7 @@ namespace Espo\Core\Name; class Field { + public const ID = 'id'; public const CREATED_BY = 'createdBy'; public const CREATED_AT = 'createdAt'; public const MODIFIED_BY = 'modifiedBy'; diff --git a/application/Espo/Core/ORM/Entity.php b/application/Espo/Core/ORM/Entity.php index be2020a9b6..73210af59e 100644 --- a/application/Espo/Core/ORM/Entity.php +++ b/application/Espo/Core/ORM/Entity.php @@ -33,6 +33,7 @@ use Espo\Core\Field\Link; use Espo\Core\Field\LinkParent; use Espo\Core\ORM\Defs\AttributeParam; use Espo\ORM\BaseEntity; +use Espo\ORM\Name\Attribute; use Espo\ORM\Query\Part\Order; use Espo\ORM\Type\AttributeType; use Espo\ORM\Type\RelationType; @@ -110,11 +111,11 @@ class Entity extends BaseEntity $repository = $this->entityManager->getRDBRepository($parentType); - $select = ['id', 'name']; + $select = [Attribute::ID, 'name']; $foreignEntity = $repository ->select($select) - ->where(['id' => $parentId]) + ->where([Attribute::ID => $parentId]) ->findOne(); $entityName = $foreignEntity ? $foreignEntity->get('name') : null; @@ -214,7 +215,7 @@ class Entity extends BaseEntity throw new LogicException("No entity-manager."); } - $select = ['id', 'name']; + $select = [Attribute::ID, 'name']; $hasType = $this->hasAttribute($field . 'Types'); @@ -343,7 +344,7 @@ class Entity extends BaseEntity throw new LogicException("No entity-manager."); } - $select = ['id', 'name']; + $select = [Attribute::ID, 'name']; $entity = $this->entityManager ->getRDBRepository($this->getEntityType()) diff --git a/application/Espo/Core/Record/Service.php b/application/Espo/Core/Record/Service.php index e4fab90e5c..a36c23fda8 100644 --- a/application/Espo/Core/Record/Service.php +++ b/application/Espo/Core/Record/Service.php @@ -66,6 +66,7 @@ use Espo\Core\Record\Select\ApplierClassNameListProvider; use Espo\Core\Select\SearchParams; use Espo\Core\Di; use Espo\ORM\Entity; +use Espo\ORM\Name\Attribute; use Espo\ORM\Repository\RDBRepository; use Espo\ORM\Collection; use Espo\ORM\Query\Part\WhereClause; @@ -251,7 +252,7 @@ class Service implements Crud, $entity = $this->getRepository() ->clone($query) - ->where(['id' => $id]) + ->where([Attribute::ID => $id]) ->findOne(); if (!$entity && $this->user->isAdmin()) { @@ -873,7 +874,7 @@ class Service implements Crud, ->select() ->from($this->entityType) ->where([ - 'id' => $id, + Attribute::ID => $id, ]) ->withDeleted() ->build(); diff --git a/application/Espo/Core/Select/AccessControl/Filters/ForeignOnlyOwn.php b/application/Espo/Core/Select/AccessControl/Filters/ForeignOnlyOwn.php index 7f374e2e42..71062f6d80 100644 --- a/application/Espo/Core/Select/AccessControl/Filters/ForeignOnlyOwn.php +++ b/application/Espo/Core/Select/AccessControl/Filters/ForeignOnlyOwn.php @@ -32,6 +32,7 @@ namespace Espo\Core\Select\AccessControl\Filters; use Espo\Core\Name\Field; use Espo\Core\Select\AccessControl\Filter; use Espo\ORM\Defs; +use Espo\ORM\Name\Attribute; use Espo\ORM\Query\SelectBuilder; use Espo\Core\Utils\Metadata; use Espo\Entities\User; @@ -82,6 +83,6 @@ class ForeignOnlyOwn implements Filter return; } - $queryBuilder->where(['id' => null]); + $queryBuilder->where([Attribute::ID => null]); } } diff --git a/application/Espo/Core/Select/AccessControl/Filters/ForeignOnlyTeam.php b/application/Espo/Core/Select/AccessControl/Filters/ForeignOnlyTeam.php index d6469cb385..c47e9845dc 100644 --- a/application/Espo/Core/Select/AccessControl/Filters/ForeignOnlyTeam.php +++ b/application/Espo/Core/Select/AccessControl/Filters/ForeignOnlyTeam.php @@ -32,6 +32,7 @@ namespace Espo\Core\Select\AccessControl\Filters; use Espo\Core\Name\Field; use Espo\Core\Select\AccessControl\Filter; use Espo\Entities\Team; +use Espo\ORM\Name\Attribute; use Espo\ORM\Query\Part\Condition; use Espo\ORM\Query\Part\Expression; use Espo\ORM\Query\Part\Where\OrGroup; @@ -67,7 +68,7 @@ class ForeignOnlyTeam implements Filter $ownerAttribute = $this->getOwnerAttribute($link); if (!$ownerAttribute) { - $queryBuilder->where(['id' => null]); + $queryBuilder->where([Attribute::ID => null]); return; } diff --git a/application/Espo/Core/Select/AccessControl/Filters/No.php b/application/Espo/Core/Select/AccessControl/Filters/No.php index 58c35d633a..5bc3cc9487 100644 --- a/application/Espo/Core/Select/AccessControl/Filters/No.php +++ b/application/Espo/Core/Select/AccessControl/Filters/No.php @@ -30,12 +30,13 @@ namespace Espo\Core\Select\AccessControl\Filters; use Espo\Core\Select\AccessControl\Filter; +use Espo\ORM\Name\Attribute; use Espo\ORM\Query\SelectBuilder as QueryBuilder; class No implements Filter { public function apply(QueryBuilder $queryBuilder): void { - $queryBuilder->where(['id' => null]); + $queryBuilder->where([Attribute::ID => null]); } } diff --git a/application/Espo/Core/Select/AccessControl/Filters/OnlyTeam.php b/application/Espo/Core/Select/AccessControl/Filters/OnlyTeam.php index b331861cfe..227fe61721 100644 --- a/application/Espo/Core/Select/AccessControl/Filters/OnlyTeam.php +++ b/application/Espo/Core/Select/AccessControl/Filters/OnlyTeam.php @@ -35,6 +35,7 @@ use Espo\Core\Select\Helpers\FieldHelper; use Espo\Entities\Team; use Espo\Entities\User; use Espo\ORM\Defs; +use Espo\ORM\Name\Attribute; use Espo\ORM\Query\SelectBuilder as QueryBuilder; /** @@ -52,16 +53,16 @@ class OnlyTeam implements Filter public function apply(QueryBuilder $queryBuilder): void { if (!$this->fieldHelper->hasTeamsField()) { - $queryBuilder->where(['id' => null]); + $queryBuilder->where([Attribute::ID => null]); return; } $subQueryBuilder = QueryBuilder::create() - ->select('id') + ->select(Attribute::ID) ->from($this->entityType) ->leftJoin(Team::RELATIONSHIP_ENTITY_TEAM, 'entityTeam', [ - 'entityTeam.entityId:' => 'id', + 'entityTeam.entityId:' => Attribute::ID, 'entityTeam.entityType' => $this->entityType, 'entityTeam.deleted' => false, ]); @@ -79,7 +80,7 @@ class OnlyTeam implements Filter $key2 = $relationDefs->getForeignMidKey(); $subQueryBuilder->leftJoin($middleEntityType, 'assignedUsersMiddle', [ - "assignedUsersMiddle.$key1:" => 'id', + "assignedUsersMiddle.$key1:" => Attribute::ID, 'assignedUsersMiddle.deleted' => false, ]); @@ -100,7 +101,7 @@ class OnlyTeam implements Filter $key2 = $relationDefs->getForeignMidKey(); $subQueryBuilder->leftJoin($middleEntityType, 'collaboratorsMiddle', [ - "collaboratorsMiddle.$key1:" => 'id', + "collaboratorsMiddle.$key1:" => Attribute::ID, 'collaboratorsMiddle.deleted' => false, ]); diff --git a/application/Espo/Core/Select/AccessControl/Filters/PortalOnlyAccount.php b/application/Espo/Core/Select/AccessControl/Filters/PortalOnlyAccount.php index 6ed29320bf..f8b2354457 100644 --- a/application/Espo/Core/Select/AccessControl/Filters/PortalOnlyAccount.php +++ b/application/Espo/Core/Select/AccessControl/Filters/PortalOnlyAccount.php @@ -34,6 +34,7 @@ use Espo\Core\Select\Helpers\FieldHelper; use Espo\Entities\User; use Espo\Modules\Crm\Entities\Account; use Espo\Modules\Crm\Entities\Contact; +use Espo\ORM\Name\Attribute; use Espo\ORM\Query\Part\Condition as Cond; use Espo\ORM\Query\Part\Expression as Expr; use Espo\ORM\Query\Part\Where\OrGroup; @@ -74,7 +75,7 @@ class PortalOnlyAccount implements Filter $orBuilder->add( Cond::in( - Expr::column('id'), + Expr::column(Attribute::ID), QueryBuilder::create() ->from(ucfirst($defs->getRelationshipName()), 'm') ->select($defs->getMidKey()) @@ -119,7 +120,7 @@ class PortalOnlyAccount implements Filter $orBuilder->add( Cond::in( - Expr::column('id'), + Expr::column(Attribute::ID), QueryBuilder::create() ->from(ucfirst($defs->getRelationshipName()), 'm') ->select($defs->getMidKey()) @@ -139,7 +140,7 @@ class PortalOnlyAccount implements Filter $orGroup = $orBuilder->build(); if ($orGroup->getItemCount() === 0) { - $queryBuilder->where(['id' => null]); + $queryBuilder->where([Attribute::ID => null]); return; } diff --git a/application/Espo/Core/Select/AccessControl/Filters/PortalOnlyOwn.php b/application/Espo/Core/Select/AccessControl/Filters/PortalOnlyOwn.php index c52091c38b..4539b94b39 100644 --- a/application/Espo/Core/Select/AccessControl/Filters/PortalOnlyOwn.php +++ b/application/Espo/Core/Select/AccessControl/Filters/PortalOnlyOwn.php @@ -32,6 +32,7 @@ namespace Espo\Core\Select\AccessControl\Filters; use Espo\Core\Select\AccessControl\Filter; use Espo\Core\Select\Helpers\FieldHelper; use Espo\Entities\User; +use Espo\ORM\Name\Attribute; use Espo\ORM\Query\SelectBuilder as QueryBuilder; class PortalOnlyOwn implements Filter @@ -49,6 +50,6 @@ class PortalOnlyOwn implements Filter return; } - $queryBuilder->where(['id' => null]); + $queryBuilder->where([Attribute::ID => null]); } } diff --git a/application/Espo/Core/Select/Bool/Filters/Followed.php b/application/Espo/Core/Select/Bool/Filters/Followed.php index f599150597..1dac1fdd93 100644 --- a/application/Espo/Core/Select/Bool/Filters/Followed.php +++ b/application/Espo/Core/Select/Bool/Filters/Followed.php @@ -32,6 +32,7 @@ namespace Espo\Core\Select\Bool\Filters; use Espo\Core\Select\Bool\Filter; use Espo\Entities\StreamSubscription; use Espo\Entities\User; +use Espo\ORM\Name\Attribute; use Espo\ORM\Query\Part\Where\OrGroupBuilder; use Espo\ORM\Query\Part\WhereClause; use Espo\ORM\Query\SelectBuilder as QueryBuilder; @@ -50,7 +51,7 @@ class Followed implements Filter $alias, [ $alias . '.entityType' => $this->entityType, - $alias . '.entityId=:' => 'id', + $alias . '.entityId=:' => Attribute::ID, $alias . '.userId' => $this->user->getId(), ] ); diff --git a/application/Espo/Core/Select/Bool/Filters/OnlyMy.php b/application/Espo/Core/Select/Bool/Filters/OnlyMy.php index a7bc40b847..91d61c09a1 100644 --- a/application/Espo/Core/Select/Bool/Filters/OnlyMy.php +++ b/application/Espo/Core/Select/Bool/Filters/OnlyMy.php @@ -34,6 +34,7 @@ use Espo\Core\Select\Bool\Filter; use Espo\Core\Select\Helpers\FieldHelper; use Espo\Entities\User; use Espo\ORM\Defs; +use Espo\ORM\Name\Attribute; use Espo\ORM\Query\Part\Condition as Cond; use Espo\ORM\Query\Part\Where\OrGroupBuilder; use Espo\ORM\Query\SelectBuilder as QueryBuilder; @@ -75,10 +76,10 @@ class OnlyMy implements Filter $key2 = $relationDefs->getForeignMidKey(); $subQuery = QueryBuilder::create() - ->select('id') + ->select(Attribute::ID) ->from($this->entityType) ->leftJoin($middleEntityType, 'assignedUsersMiddle', [ - "assignedUsersMiddle.$key1:" => 'id', + "assignedUsersMiddle.$key1:" => Attribute::ID, 'assignedUsersMiddle.deleted' => false, ]) ->where(["assignedUsersMiddle.$key2" => $this->user->getId()]) @@ -86,7 +87,7 @@ class OnlyMy implements Filter $orGroupBuilder->add( Cond::in( - Cond::column('id'), + Cond::column(Attribute::ID), $subQuery ) ); diff --git a/application/Espo/Core/Select/Order/Applier.php b/application/Espo/Core/Select/Order/Applier.php index 4f61c84eaf..89b9479bff 100644 --- a/application/Espo/Core/Select/Order/Applier.php +++ b/application/Espo/Core/Select/Order/Applier.php @@ -31,6 +31,7 @@ namespace Espo\Core\Select\Order; use Espo\Core\Exceptions\BadRequest; use Espo\Core\ORM\Type\FieldType; +use Espo\ORM\Name\Attribute; use Espo\ORM\Query\Part\OrderList; use Espo\Core\Exceptions\Forbidden; use Espo\Core\Select\Order\Item as OrderItem; @@ -97,7 +98,7 @@ class Applier $orderBy = $this->metadataProvider->getDefaultOrderBy($this->entityType); if (!$orderBy) { - $queryBuilder->order('id', $order); + $queryBuilder->order(Attribute::ID, $order); return; } @@ -143,8 +144,8 @@ class Applier OrderItem::create($orderBy, $order) ); - if ($order !== 'id') { - $queryBuilder->order('id', $order); + if ($order !== Attribute::ID) { + $queryBuilder->order(Attribute::ID, $order); } return; @@ -185,14 +186,14 @@ class Applier } if ( - $orderBy !== 'id' && + $orderBy !== Attribute::ID && ( !$orderByAttribute || !$this->metadataProvider->isAttributeParamUniqueTrue($this->entityType, $orderByAttribute) ) && - $this->metadataProvider->hasAttribute($this->entityType, 'id') + $this->metadataProvider->hasAttribute($this->entityType, Attribute::ID) ) { - $resultOrderBy[] = ['id', $order]; + $resultOrderBy[] = [Attribute::ID, $order]; } $queryBuilder->order($resultOrderBy); diff --git a/application/Espo/Core/Select/Primary/Filters/Followed.php b/application/Espo/Core/Select/Primary/Filters/Followed.php index 1782adcc12..14e46d2947 100644 --- a/application/Espo/Core/Select/Primary/Filters/Followed.php +++ b/application/Espo/Core/Select/Primary/Filters/Followed.php @@ -32,6 +32,7 @@ namespace Espo\Core\Select\Primary\Filters; use Espo\Core\Select\Primary\Filter; use Espo\Entities\StreamSubscription; use Espo\Entities\User; +use Espo\ORM\Name\Attribute; use Espo\ORM\Query\SelectBuilder as QueryBuilder; class Followed implements Filter @@ -48,7 +49,7 @@ class Followed implements Filter $alias, [ $alias . '.entityType' => $this->entityType, - $alias . '.entityId=:' => 'id', + $alias . '.entityId=:' => Attribute::ID, $alias . '.userId' => $this->user->getId(), ] ); diff --git a/application/Espo/Core/Select/Primary/Filters/Starred.php b/application/Espo/Core/Select/Primary/Filters/Starred.php index 9bb14e833b..88cd48972e 100644 --- a/application/Espo/Core/Select/Primary/Filters/Starred.php +++ b/application/Espo/Core/Select/Primary/Filters/Starred.php @@ -32,6 +32,7 @@ namespace Espo\Core\Select\Primary\Filters; use Espo\Core\Select\Primary\Filter; use Espo\Entities\StarSubscription; use Espo\Entities\User; +use Espo\ORM\Name\Attribute; use Espo\ORM\Query\SelectBuilder as QueryBuilder; /** @@ -51,7 +52,7 @@ class Starred implements Filter $alias, [ "$alias.entityType" => $this->entityType, - "$alias.entityId=:" => 'id', + "$alias.entityId=:" => Attribute::ID, "$alias.userId" => $this->user->getId(), ] ); diff --git a/application/Espo/Core/Select/Select/Applier.php b/application/Espo/Core/Select/Select/Applier.php index 112c170752..0d95d89a25 100644 --- a/application/Espo/Core/Select/Select/Applier.php +++ b/application/Espo/Core/Select/Select/Applier.php @@ -34,6 +34,7 @@ use Espo\Core\Utils\FieldUtil; use Espo\Entities\User; use Espo\ORM\Entity; +use Espo\ORM\Name\Attribute; use Espo\ORM\Query\SelectBuilder as QueryBuilder; class Applier @@ -121,8 +122,8 @@ class Applier $attributeList = []; - if (!in_array('id', $passedAttributeList)) { - $attributeList[] = 'id'; + if (!in_array(Attribute::ID, $passedAttributeList)) { + $attributeList[] = Attribute::ID; } foreach ($this->getAclAttributeList() as $attribute) { diff --git a/application/Espo/Core/Select/SelectManager.php b/application/Espo/Core/Select/SelectManager.php index d9d43a6063..8987711b1e 100644 --- a/application/Espo/Core/Select/SelectManager.php +++ b/application/Espo/Core/Select/SelectManager.php @@ -43,6 +43,7 @@ use Espo\Core\Utils\Metadata; use Espo\Entities\StreamSubscription; use Espo\ORM\Entity; +use Espo\ORM\Name\Attribute; use Espo\ORM\Query\Select as SelectQuery; use Espo\ORM\QueryComposer\BaseQueryComposer as QueryComposer; @@ -249,11 +250,11 @@ class SelectManager } if ( - $sortBy != 'id' && + $sortBy != Attribute::ID && (!$orderByAttribute || !$this->getSeed()->getAttributeParam($orderByAttribute, 'unique')) && - $this->getSeed()->hasAttribute('id') + $this->getSeed()->hasAttribute(Attribute::ID) ) { - $result['orderBy'][] = ['id', $desc]; + $result['orderBy'][] = [Attribute::ID, $desc]; } return; @@ -2931,8 +2932,8 @@ class SelectManager $seed = $this->getSeed(); $attributeList = []; - if (!in_array('id', $passedAttributeList)) { - $attributeList[] = 'id'; + if (!in_array(Attribute::ID, $passedAttributeList)) { + $attributeList[] = Attribute::ID; } $aclAttributeList = $this->aclAttributeList; diff --git a/application/Espo/Core/Select/Where/ItemGeneralConverter.php b/application/Espo/Core/Select/Where/ItemGeneralConverter.php index f1c5c6b5c8..718ed0e11b 100644 --- a/application/Espo/Core/Select/Where/ItemGeneralConverter.php +++ b/application/Espo/Core/Select/Where/ItemGeneralConverter.php @@ -42,6 +42,7 @@ use Espo\Entities\ArrayValue; use Espo\Entities\User; use Espo\ORM\Defs as ORMDefs; use Espo\ORM\Entity; +use Espo\ORM\Name\Attribute; use Espo\ORM\Query\Part\Condition as Cond; use Espo\ORM\Query\Part\Join; use Espo\ORM\Query\Part\WhereClause; @@ -1499,7 +1500,7 @@ class ItemGeneralConverter implements ItemConverter $relationType == Entity::HAS_ONE ) { $subQuery = QueryBuilder::create() - ->select('id') + ->select(Attribute::ID) ->from($this->entityType) ->leftJoin($link, $alias) ->where([$alias . '.id' => $value]) diff --git a/application/Espo/Core/Utils/Database/Orm/Converter.php b/application/Espo/Core/Utils/Database/Orm/Converter.php index 843c53ad3a..e89de5f8fc 100644 --- a/application/Espo/Core/Utils/Database/Orm/Converter.php +++ b/application/Espo/Core/Utils/Database/Orm/Converter.php @@ -44,6 +44,7 @@ use Espo\ORM\Defs\RelationDefs; use Espo\ORM\Entity; use Espo\Core\Utils\Metadata; use Espo\Core\Utils\Metadata\Helper as MetadataHelper; +use Espo\ORM\Name\Attribute; use LogicException; class Converter @@ -373,14 +374,14 @@ class Converter ]; $output = [ - 'id' => [ + Attribute::ID => [ 'type' => Entity::ID, ], 'name' => [ 'type' => $entityMetadata['fields']['name']['type'] ?? Entity::VARCHAR, 'notStorable' => true, ], - 'deleted' => [ + Attribute::DELETED => [ 'type' => Entity::BOOL, 'default' => false, ], diff --git a/application/Espo/Core/Utils/Database/Orm/LinkConverters/EmailEmailAddress.php b/application/Espo/Core/Utils/Database/Orm/LinkConverters/EmailEmailAddress.php index 1f364985ec..7899ff4cfa 100644 --- a/application/Espo/Core/Utils/Database/Orm/LinkConverters/EmailEmailAddress.php +++ b/application/Espo/Core/Utils/Database/Orm/LinkConverters/EmailEmailAddress.php @@ -35,6 +35,7 @@ use Espo\Core\Utils\Database\Orm\Defs\RelationDefs; use Espo\Core\Utils\Database\Orm\LinkConverter; use Espo\Entities\EmailAddress; use Espo\ORM\Defs\RelationDefs as LinkDefs; +use Espo\ORM\Name\Attribute; use Espo\ORM\Type\AttributeType; use Espo\ORM\Type\RelationType; @@ -55,8 +56,8 @@ class EmailEmailAddress implements LinkConverter $relationDefs = RelationDefs::create($name) ->withType(RelationType::MANY_MANY) ->withForeignEntityType($foreignEntityType) - ->withKey('id') - ->withForeignKey('id') + ->withKey(Attribute::ID) + ->withForeignKey(Attribute::ID) ->withMidKeys($key1, $key2); return EntityDefs::create() diff --git a/application/Espo/Core/Utils/Database/Orm/LinkConverters/ManyMany.php b/application/Espo/Core/Utils/Database/Orm/LinkConverters/ManyMany.php index 17a37e3bc6..fa58a67efd 100644 --- a/application/Espo/Core/Utils/Database/Orm/LinkConverters/ManyMany.php +++ b/application/Espo/Core/Utils/Database/Orm/LinkConverters/ManyMany.php @@ -35,6 +35,7 @@ use Espo\Core\Utils\Database\Orm\Defs\RelationDefs; use Espo\Core\Utils\Database\Orm\LinkConverter; use Espo\Core\Utils\Util; use Espo\ORM\Defs\RelationDefs as LinkDefs; +use Espo\ORM\Name\Attribute; use Espo\ORM\Type\AttributeType; use Espo\ORM\Type\RelationType; @@ -70,8 +71,8 @@ class ManyMany implements LinkConverter ->withType(RelationType::MANY_MANY) ->withForeignEntityType($foreignEntityType) ->withRelationshipName($relationshipName) - ->withKey('id') - ->withForeignKey('id') + ->withKey(Attribute::ID) + ->withForeignKey(Attribute::ID) ->withMidKeys($key1, $key2) ->withForeignRelationName($foreignRelationName); diff --git a/application/Espo/ORM/BaseEntity.php b/application/Espo/ORM/BaseEntity.php index 68c2e49c44..60bc697fbd 100644 --- a/application/Espo/ORM/BaseEntity.php +++ b/application/Espo/ORM/BaseEntity.php @@ -29,6 +29,7 @@ namespace Espo\ORM; +use Espo\ORM\Name\Attribute; use Espo\ORM\Relation\EmptyRelations; use Espo\ORM\Relation\Relations; use Espo\ORM\Type\AttributeType; @@ -106,7 +107,7 @@ class BaseEntity implements Entity public function getId(): string { /** @var ?string $id */ - $id = $this->get('id'); + $id = $this->get(Attribute::ID); if ($id === null) { throw new RuntimeException("Entity ID is not set."); @@ -173,7 +174,7 @@ class BaseEntity implements Entity if (is_string($arg)) { $name = $arg; - if ($name == 'id') { + if ($name == Attribute::ID) { $this->id = $value; } @@ -217,7 +218,7 @@ class BaseEntity implements Entity */ public function get(string $attribute): mixed { - if ($attribute === 'id') { + if ($attribute === Attribute::ID) { return $this->id; } @@ -342,7 +343,7 @@ class BaseEntity implements Entity */ public function has(string $attribute): bool { - if ($attribute == 'id') { + if ($attribute == Attribute::ID) { return (bool) $this->id; } @@ -435,7 +436,7 @@ class BaseEntity implements Entity return $type === AttributeType::FOREIGN && $this->getAttributeParam($attribute, 'relation') === substr($attribute, 0, -2) && - $this->getAttributeParam($attribute, 'foreign') === 'id' && + $this->getAttributeParam($attribute, 'foreign') === Attribute::ID && str_ends_with($attribute, 'Id'); } @@ -675,11 +676,11 @@ class BaseEntity implements Entity $map = []; if (isset($this->id)) { - $map['id'] = $this->id; + $map[Attribute::ID] = $this->id; } foreach ($this->getAttributeList() as $attribute) { - if ($attribute === 'id') { + if ($attribute === Attribute::ID) { continue; } @@ -872,7 +873,7 @@ class BaseEntity implements Entity */ public function getFetched(string $attribute) { - if ($attribute === 'id') { + if ($attribute === Attribute::ID) { return $this->id; } @@ -888,7 +889,7 @@ class BaseEntity implements Entity */ public function hasFetched(string $attribute): bool { - if ($attribute === 'id') { + if ($attribute === Attribute::ID) { return !is_null($this->id); } @@ -1074,7 +1075,7 @@ class BaseEntity implements Entity continue; } - if ($attribute === 'id') { + if ($attribute === Attribute::ID) { $this->id = $data[$attribute]; continue; diff --git a/application/Espo/ORM/EntityCollection.php b/application/Espo/ORM/EntityCollection.php index 5c2920700f..59fc5a657d 100644 --- a/application/Espo/ORM/EntityCollection.php +++ b/application/Espo/ORM/EntityCollection.php @@ -29,6 +29,7 @@ namespace Espo\ORM; +use Espo\ORM\Name\Attribute; use Iterator; use Countable; use ArrayAccess; @@ -317,11 +318,11 @@ class EntityCollection implements Collection, Iterator, Countable, ArrayAccess, if (is_array($value)) { foreach ($this->dataList as $v) { if (is_array($v)) { - if ($value['id'] == $v['id']) { + if ($value[Attribute::ID] == $v[Attribute::ID]) { return $index; } } else if ($v instanceof Entity) { - if ($value['id'] == $v->getId()) { + if ($value[Attribute::ID] == $v->getId()) { return $index; } } @@ -331,7 +332,7 @@ class EntityCollection implements Collection, Iterator, Countable, ArrayAccess, } else if ($value instanceof Entity) { foreach ($this->dataList as $v) { if (is_array($v)) { - if ($value->getId() == $v['id']) { + if ($value->getId() == $v[Attribute::ID]) { return $index; } } else if ($v instanceof Entity) { diff --git a/application/Espo/ORM/Mapper/BaseMapper.php b/application/Espo/ORM/Mapper/BaseMapper.php index 111bf3cdf3..36293a2913 100644 --- a/application/Espo/ORM/Mapper/BaseMapper.php +++ b/application/Espo/ORM/Mapper/BaseMapper.php @@ -32,6 +32,7 @@ namespace Espo\ORM\Mapper; use Espo\ORM\Entity; use Espo\ORM\BaseEntity; use Espo\ORM\Collection; +use Espo\ORM\Name\Attribute; use Espo\ORM\Query\DeleteBuilder; use Espo\ORM\Query\InsertBuilder; use Espo\ORM\Query\Part\Selection; @@ -59,8 +60,8 @@ use const JSON_UNESCAPED_UNICODE; */ class BaseMapper implements RDBMapper { - private const ATTR_ID = 'id'; - private const ATTR_DELETED = 'deleted'; + private const ATTR_ID = Attribute::ID; + private const ATTR_DELETED = Attribute::DELETED; private const FUNC_COUNT = 'COUNT'; private Helper $helper; @@ -119,7 +120,7 @@ class BaseMapper implements RDBMapper */ public function count(Select $select): int { - return (int) $this->aggregate($select, self::FUNC_COUNT, 'id'); + return (int) $this->aggregate($select, self::FUNC_COUNT, Attribute::ID); } public function max(Select $select, string $attribute): int|float @@ -212,7 +213,7 @@ class BaseMapper implements RDBMapper private function convertSelectQueryToAggregation( Select $select, string $aggregation, - string $aggregationBy = 'id' + string $aggregationBy = Attribute::ID ): Select { $expression = "$aggregation:($aggregationBy)"; @@ -246,7 +247,7 @@ class BaseMapper implements RDBMapper $subQueryBuilder = SelectBuilder::create() ->clone($selectAggregation) ->select([]) - ->select('id'); + ->select(Attribute::ID); if ($select->isDistinct()) { $subQueryBuilder->distinct(); @@ -776,7 +777,7 @@ class BaseMapper implements RDBMapper $selectColumns[] = ["VALUE:$value", "v$i"]; } - $selectColumns[] = 'id'; + $selectColumns[] = Attribute::ID; $subQuery = SelectBuilder::create() ->clone($select) @@ -816,7 +817,7 @@ class BaseMapper implements RDBMapper $id = $relEntity->getId(); } - if (empty($id) || empty($relationName) || !$entity->get('id')) { + if (empty($id) || empty($relationName) || !$entity->get(Attribute::ID)) { throw new RuntimeException("Can't relate an empty entity or relation name."); } @@ -840,7 +841,7 @@ class BaseMapper implements RDBMapper if (is_null($relEntity)) { $relEntity = $this->entityFactory->create($foreignEntityType); - $relEntity->set('id', $id); + $relEntity->set(Attribute::ID, $id); } $keySet = $this->helper->getRelationKeys($entity, $relationName); @@ -1035,7 +1036,7 @@ class BaseMapper implements RDBMapper $selectQuery = SelectBuilder::create() ->from($middleName) - ->select(['id']) + ->select([Attribute::ID]) ->where($where) ->withDeleted() ->build(); @@ -1131,7 +1132,7 @@ class BaseMapper implements RDBMapper if (is_null($relEntity) && $relType !== Entity::BELONGS_TO_PARENT) { $relEntity = $this->entityFactory->create($foreignEntityType); - $relEntity->set('id', $id); + $relEntity->set(Attribute::ID, $id); } $keySet = $this->helper->getRelationKeys($entity, $relationName); @@ -1146,7 +1147,7 @@ class BaseMapper implements RDBMapper ]; $where = [ - 'id' => $entity->getId(), + Attribute::ID => $entity->getId(), ]; if (!$all) { @@ -1305,7 +1306,7 @@ class BaseMapper implements RDBMapper $this->queryExecutor->execute($query); - if ($this->getAttributeParam($entity, 'id', 'autoincrement')) { + if ($this->getAttributeParam($entity, Attribute::ID, 'autoincrement')) { $this->setLastInsertIdWithinConnection($entity); } } @@ -1319,12 +1320,12 @@ class BaseMapper implements RDBMapper return; } - if ($entity->getAttributeType('id') === Entity::INT) { + if ($entity->getAttributeType(Attribute::ID) === Entity::INT) { $id = (int) $id; } - $entity->set('id', $id); - $entity->setFetched('id', $id); + $entity->set(Attribute::ID, $id); + $entity->setFetched(Attribute::ID, $id); } /** @@ -1427,7 +1428,7 @@ class BaseMapper implements RDBMapper $valueMap = []; foreach ($this->toValueMap($entity) as $attribute => $value) { - if ($attribute == 'id') { + if ($attribute == Attribute::ID) { continue; } diff --git a/application/Espo/ORM/Mapper/Helper.php b/application/Espo/ORM/Mapper/Helper.php index f79d634d79..b4f4c0394e 100644 --- a/application/Espo/ORM/Mapper/Helper.php +++ b/application/Espo/ORM/Mapper/Helper.php @@ -32,6 +32,7 @@ namespace Espo\ORM\Mapper; use Espo\ORM\Entity; use Espo\ORM\Metadata; +use Espo\ORM\Name\Attribute; use RuntimeException; class Helper @@ -68,7 +69,7 @@ class Helper $foreignKey = $defs->hasForeignKey() ? $defs->getForeignKey() : - 'id'; + Attribute::ID; return [ 'key' => $key, @@ -77,7 +78,7 @@ class Helper case Entity::HAS_MANY: case Entity::HAS_ONE: - $key = $defs->hasKey() ? $defs->getKey() : 'id'; + $key = $defs->hasKey() ? $defs->getKey() : Attribute::ID; $foreign = $defs->hasForeignRelationName() ? $defs->getForeignRelationName() : @@ -101,7 +102,7 @@ class Helper ]; case Entity::HAS_CHILDREN: - $key = $defs->hasKey() ? $defs->getKey() : 'id'; + $key = $defs->hasKey() ? $defs->getKey() : Attribute::ID; $foreignKey = $defs->hasForeignKey() ? $defs->getForeignKey() : @@ -118,11 +119,11 @@ class Helper case Entity::MANY_MANY: $key = $defs->hasKey() ? $defs->getKey() : - 'id'; + Attribute::ID; $foreignKey = $defs->hasForeignKey() ? $defs->getForeignKey() : - 'id'; + Attribute::ID; $nearKey = $defs->hasMidKey() ? $defs->getMidKey() : @@ -146,7 +147,7 @@ class Helper return [ 'key' => $key, 'typeKey' => $typeKey, - 'foreignKey' => 'id', + 'foreignKey' => Attribute::ID, ]; } diff --git a/application/Espo/ORM/Name/Attribute.php b/application/Espo/ORM/Name/Attribute.php new file mode 100644 index 0000000000..fd96bfacfa --- /dev/null +++ b/application/Espo/ORM/Name/Attribute.php @@ -0,0 +1,36 @@ +. + * + * The interactive user interfaces in modified source and object code versions + * of this program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU Affero General Public License version 3. + * + * In accordance with Section 7(b) of the GNU Affero General Public License version 3, + * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. + ************************************************************************/ + +namespace Espo\ORM\Name; + +interface Attribute +{ + public const ID = 'id'; + public const DELETED = 'deleted'; +} diff --git a/application/Espo/ORM/QueryComposer/BaseQueryComposer.php b/application/Espo/ORM/QueryComposer/BaseQueryComposer.php index 38f38f8085..5d95721289 100644 --- a/application/Espo/ORM/QueryComposer/BaseQueryComposer.php +++ b/application/Espo/ORM/QueryComposer/BaseQueryComposer.php @@ -36,6 +36,7 @@ use Espo\ORM\BaseEntity; use Espo\ORM\EventDispatcher; use Espo\ORM\Metadata; use Espo\ORM\Mapper\Helper; +use Espo\ORM\Name\Attribute; use Espo\ORM\Query\Part\Expression; use Espo\ORM\Query\Query; use Espo\ORM\Query\SelectingQuery; @@ -628,8 +629,8 @@ abstract class BaseQueryComposer implements QueryComposer $entity = $this->getSeed($entityType); - if (!$params['withDeleted'] && $entity->hasAttribute('deleted')) { - $whereClause = $whereClause + ['deleted' => false]; + if (!$params['withDeleted'] && $entity->hasAttribute(Attribute::DELETED)) { + $whereClause = $whereClause + [Attribute::DELETED => false]; } $wherePart = $this->getWherePart($entity, $whereClause, 'AND', $params); @@ -3349,7 +3350,7 @@ abstract class BaseQueryComposer implements QueryComposer $foreignKey = $keySet['foreignKey']; $distantTable = $this->toDb($foreignEntityType); - $leftIdColumn = $this->quoteColumn("$fromAlias." . $this->toDb('id')); + $leftIdColumn = $this->quoteColumn("$fromAlias." . $this->toDb(Attribute::ID)); $rightIdColumn = $this->quoteColumn("$alias." . $this->toDb($foreignKey)); $leftDeletedColumn = $this->quoteColumn("$alias.deleted"); @@ -3381,7 +3382,7 @@ abstract class BaseQueryComposer implements QueryComposer $distantTable = $this->toDb($foreignEntityType); - $leftIdColumn = $this->quoteColumn("$fromAlias." . $this->toDb('id')); + $leftIdColumn = $this->quoteColumn("$fromAlias." . $this->toDb(Attribute::ID)); $rightIdColumn = $this->quoteColumn("$alias." . $this->toDb($foreignKey)); $leftTypeColumn = $this->quoteColumn("$alias." . $this->toDb($foreignType)); $leftDeletedColumn = $this->quoteColumn("$alias.deleted"); diff --git a/application/Espo/ORM/QueryComposer/PostgresqlQueryComposer.php b/application/Espo/ORM/QueryComposer/PostgresqlQueryComposer.php index 507cadb62b..683f77437c 100644 --- a/application/Espo/ORM/QueryComposer/PostgresqlQueryComposer.php +++ b/application/Espo/ORM/QueryComposer/PostgresqlQueryComposer.php @@ -30,6 +30,7 @@ namespace Espo\ORM\QueryComposer; use Espo\ORM\Entity; +use Espo\ORM\Name\Attribute; use Espo\ORM\Query\Delete as DeleteQuery; use Espo\ORM\Query\DeleteBuilder; use Espo\ORM\Query\Insert as InsertQuery; @@ -363,7 +364,7 @@ class PostgresqlQueryComposer extends BaseQueryComposer $query->getOrder() !== [] ) { $subQueryBuilder = SelectBuilder::create() - ->select('id') + ->select(Attribute::ID) ->from($query->getFrom()) ->order($query->getOrder()); @@ -387,7 +388,7 @@ class PostgresqlQueryComposer extends BaseQueryComposer ->from($query->getFrom(), $query->getFromAlias()) ->where( Cond::in( - Cond::column('id'), + Cond::column(Attribute::ID), $subQueryBuilder->build() ) ); @@ -407,7 +408,7 @@ class PostgresqlQueryComposer extends BaseQueryComposer $query->getOrder() !== [] ) { $subQueryBuilder = SelectBuilder::create() - ->select('id') + ->select(Attribute::ID) ->from($query->getIn()) ->order($query->getOrder()) ->forUpdate(); @@ -433,7 +434,7 @@ class PostgresqlQueryComposer extends BaseQueryComposer ->set($query->getSet()) ->where( Cond::in( - Cond::column('id'), + Cond::column(Attribute::ID), $subQueryBuilder->build() ) ); @@ -490,7 +491,7 @@ class PostgresqlQueryComposer extends BaseQueryComposer } } - return ['id']; + return [Attribute::ID]; } /** diff --git a/application/Espo/ORM/Repository/RDBRelation.php b/application/Espo/ORM/Repository/RDBRelation.php index 80682a1fe2..662d0289b3 100644 --- a/application/Espo/ORM/Repository/RDBRelation.php +++ b/application/Espo/ORM/Repository/RDBRelation.php @@ -34,6 +34,7 @@ use Espo\ORM\Entity; use Espo\ORM\EntityCollection; use Espo\ORM\EntityManager; use Espo\ORM\BaseEntity; +use Espo\ORM\Name\Attribute; use Espo\ORM\Query\Select; use Espo\ORM\Query\Part\WhereItem; use Espo\ORM\Query\Part\Selection; @@ -304,7 +305,7 @@ class RDBRelation * @param (Order::ASC|Order::DESC)|bool|null $direction A direction. * @return Builder */ - public function order($orderBy = 'id', $direction = null): Builder + public function order($orderBy = Attribute::ID, $direction = null): Builder { return $this->createSelectBuilder()->order($orderBy, $direction); } @@ -413,8 +414,8 @@ class RDBRelation $this->processCheckForeignEntity($entity); return (bool) $this->createSelectBuilder() - ->select(['id']) - ->where(['id' => $entity->getId()]) + ->select([Attribute::ID]) + ->where([Attribute::ID => $entity->getId()]) ->findOne(); } @@ -429,8 +430,8 @@ class RDBRelation } return (bool) $this->createSelectBuilder() - ->select(['id']) - ->where(['id' => $id]) + ->select([Attribute::ID]) + ->where([Attribute::ID => $id]) ->findOne(); } @@ -492,7 +493,7 @@ class RDBRelation $seed = $this->entityManager->getEntityFactory()->create($foreignEntityType); - $seed->set('id', $id); + $seed->set(Attribute::ID, $id); $this->relate($seed, $columnData, $options); } @@ -517,7 +518,7 @@ class RDBRelation $seed = $this->entityManager->getEntityFactory()->create($foreignEntityType); - $seed->set('id', $id); + $seed->set(Attribute::ID, $id); $this->unrelate($seed, $options); } @@ -542,7 +543,7 @@ class RDBRelation $seed = $this->entityManager->getEntityFactory()->create($foreignEntityType); - $seed->set('id', $id); + $seed->set(Attribute::ID, $id); $this->updateColumns($seed, $columnData); } diff --git a/application/Espo/ORM/Repository/RDBRelationSelectBuilder.php b/application/Espo/ORM/Repository/RDBRelationSelectBuilder.php index 93d7160025..f477b3aeac 100644 --- a/application/Espo/ORM/Repository/RDBRelationSelectBuilder.php +++ b/application/Espo/ORM/Repository/RDBRelationSelectBuilder.php @@ -32,6 +32,7 @@ namespace Espo\ORM\Repository; use Espo\ORM\Collection; use Espo\ORM\EntityCollection; use Espo\ORM\Mapper\RDBMapper; +use Espo\ORM\Name\Attribute; use Espo\ORM\SthCollection; use Espo\ORM\Entity; use Espo\ORM\EntityManager; @@ -368,7 +369,7 @@ class RDBRelationSelectBuilder * @param (Order::ASC|Order::DESC)|bool|null $direction Select::ORDER_ASC|Select::ORDER_DESC. * @return self */ - public function order($orderBy = 'id', $direction = null): self + public function order($orderBy = Attribute::ID, $direction = null): self { $this->builder->order($orderBy, $direction); diff --git a/application/Espo/ORM/Repository/RDBRepository.php b/application/Espo/ORM/Repository/RDBRepository.php index f21f16b8a0..ff418e79bd 100644 --- a/application/Espo/ORM/Repository/RDBRepository.php +++ b/application/Espo/ORM/Repository/RDBRepository.php @@ -33,6 +33,7 @@ use Espo\ORM\Defs\RelationDefs; use Espo\ORM\EntityManager; use Espo\ORM\EntityFactory; use Espo\ORM\Collection; +use Espo\ORM\Name\Attribute; use Espo\ORM\Relation\Relations; use Espo\ORM\Relation\RelationsMap; use Espo\ORM\Repository\Deprecation\RDBRepositoryDeprecationTrait; @@ -109,7 +110,7 @@ class RDBRepository implements Repository ->getQueryBuilder() ->select() ->from($this->entityType) - ->where(['id' => $id]) + ->where([Attribute::ID => $id]) ->build(); /** @var ?TEntity $entity */ @@ -422,7 +423,7 @@ class RDBRepository implements Repository * @param (Order::ASC|Order::DESC)|bool|null $direction A direction. * @return RDBSelectBuilder */ - public function order($orderBy = 'id', $direction = null): RDBSelectBuilder + public function order($orderBy = Attribute::ID, $direction = null): RDBSelectBuilder { return $this->createSelectBuilder()->order($orderBy, $direction); } diff --git a/application/Espo/ORM/Repository/RDBSelectBuilder.php b/application/Espo/ORM/Repository/RDBSelectBuilder.php index a3b3ea42d5..100ec54338 100644 --- a/application/Espo/ORM/Repository/RDBSelectBuilder.php +++ b/application/Espo/ORM/Repository/RDBSelectBuilder.php @@ -31,6 +31,7 @@ namespace Espo\ORM\Repository; use Espo\ORM\Collection; use Espo\ORM\EntityCollection; +use Espo\ORM\Name\Attribute; use Espo\ORM\SthCollection; use Espo\ORM\Entity; use Espo\ORM\EntityManager; @@ -327,7 +328,7 @@ class RDBSelectBuilder * @param (Order::ASC|Order::DESC)|bool|null $direction A direction. * @return RDBSelectBuilder */ - public function order($orderBy = 'id', $direction = null): self + public function order($orderBy = Attribute::ID, $direction = null): self { $this->builder->order($orderBy, $direction);