![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mautic.corals.io/vendor/doctrine/orm/src/Mapping/ |
<?php declare(strict_types=1); namespace Doctrine\ORM\Mapping; use Doctrine\Deprecations\Deprecation; use function preg_replace; use function str_contains; use function strrpos; use function strtolower; use function strtoupper; use function substr; use const CASE_LOWER; use const CASE_UPPER; /** * Naming strategy implementing the underscore naming convention. * Converts 'MyEntity' to 'my_entity' or 'MY_ENTITY'. * * @link www.doctrine-project.org */ class UnderscoreNamingStrategy implements NamingStrategy { private const DEFAULT_PATTERN = '/(?<=[a-z])([A-Z])/'; private const NUMBER_AWARE_PATTERN = '/(?<=[a-z0-9])([A-Z])/'; /** @var int */ private $case; /** * @var string * @psalm-var non-empty-string */ private $pattern; /** * Underscore naming strategy construct. * * @param int $case CASE_LOWER | CASE_UPPER */ public function __construct($case = CASE_LOWER, bool $numberAware = false) { if (! $numberAware) { Deprecation::trigger( 'doctrine/orm', 'https://github.com/doctrine/orm/pull/7908', 'Creating %s without setting second argument $numberAware=true is deprecated and will be removed in Doctrine ORM 3.0.', self::class ); } $this->case = $case; $this->pattern = $numberAware ? self::NUMBER_AWARE_PATTERN : self::DEFAULT_PATTERN; } /** @return int CASE_LOWER | CASE_UPPER */ public function getCase() { return $this->case; } /** * Sets string case CASE_LOWER | CASE_UPPER. * Alphabetic characters converted to lowercase or uppercase. * * @param int $case * * @return void */ public function setCase($case) { $this->case = $case; } /** * {@inheritDoc} */ public function classToTableName($className) { if (str_contains($className, '\\')) { $className = substr($className, strrpos($className, '\\') + 1); } return $this->underscore($className); } /** * {@inheritDoc} */ public function propertyToColumnName($propertyName, $className = null) { return $this->underscore($propertyName); } /** * {@inheritDoc} */ public function embeddedFieldToColumnName($propertyName, $embeddedColumnName, $className = null, $embeddedClassName = null) { return $this->underscore($propertyName) . '_' . $embeddedColumnName; } /** * {@inheritDoc} */ public function referenceColumnName() { return $this->case === CASE_UPPER ? 'ID' : 'id'; } /** * {@inheritDoc} * * @param string $propertyName * @param class-string $className */ public function joinColumnName($propertyName, $className = null) { return $this->underscore($propertyName) . '_' . $this->referenceColumnName(); } /** * {@inheritDoc} */ public function joinTableName($sourceEntity, $targetEntity, $propertyName = null) { return $this->classToTableName($sourceEntity) . '_' . $this->classToTableName($targetEntity); } /** * {@inheritDoc} */ public function joinKeyColumnName($entityName, $referencedColumnName = null) { return $this->classToTableName($entityName) . '_' . ($referencedColumnName ?: $this->referenceColumnName()); } private function underscore(string $string): string { $string = preg_replace($this->pattern, '_$1', $string); if ($this->case === CASE_UPPER) { return strtoupper($string); } return strtolower($string); } }