add UnderscoreNamingStrategy
This commit is contained in:
parent
537821418e
commit
8b1f60c9f8
133
lib/Doctrine/ORM/UnderscoreNamingStrategy.php
Normal file
133
lib/Doctrine/ORM/UnderscoreNamingStrategy.php
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* This software consists of voluntary contributions made by many individuals
|
||||||
|
* and is licensed under the LGPL. For more information, see
|
||||||
|
* <http://www.doctrine-project.org>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Doctrine\ORM;
|
||||||
|
use Doctrine\Common\Util\Inflector;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The default NamingStrategy
|
||||||
|
*
|
||||||
|
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||||
|
* @link www.doctrine-project.org
|
||||||
|
* @since 2.3
|
||||||
|
* @author Fabio B. Silva <fabio.bat.silva@gmail.com>
|
||||||
|
*/
|
||||||
|
class UnderscoreNamingStrategy implements NamingStrategy
|
||||||
|
{
|
||||||
|
const CASE_LOWER = 'lower';
|
||||||
|
const CASE_UPPER = 'upper';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $case;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $case
|
||||||
|
*/
|
||||||
|
public function __construct($case = self::CASE_LOWER)
|
||||||
|
{
|
||||||
|
$this->case = $case;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getCase()
|
||||||
|
{
|
||||||
|
return $this->case;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $case
|
||||||
|
*/
|
||||||
|
public function setCase($case)
|
||||||
|
{
|
||||||
|
$this->case = $case;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function classToTableName($className)
|
||||||
|
{
|
||||||
|
if (strpos($className, '\\') !== false) {
|
||||||
|
$className = substr($className, strrpos($className, '\\') + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->underscore($className);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function propertyToColumnName($propertyName)
|
||||||
|
{
|
||||||
|
return $this->underscore($propertyName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function referenceColumnName()
|
||||||
|
{
|
||||||
|
return $this->case == self::CASE_UPPER ? 'ID' : 'id';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function joinColumnName($propertyName)
|
||||||
|
{
|
||||||
|
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());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $string
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
private function underscore($string)
|
||||||
|
{
|
||||||
|
$string = Inflector::tableize($string);
|
||||||
|
|
||||||
|
if ($this->case == self::CASE_UPPER) {
|
||||||
|
return strtoupper($string);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $string;
|
||||||
|
}
|
||||||
|
}
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace Doctrine\Tests\ORM;
|
namespace Doctrine\Tests\ORM;
|
||||||
|
|
||||||
|
use Doctrine\ORM\UnderscoreNamingStrategy;
|
||||||
use Doctrine\ORM\DefaultNamingStrategy;
|
use Doctrine\ORM\DefaultNamingStrategy;
|
||||||
use Doctrine\ORM\NamingStrategy;
|
use Doctrine\ORM\NamingStrategy;
|
||||||
|
|
||||||
@ -12,20 +13,28 @@ require_once __DIR__ . '/../TestInit.php';
|
|||||||
*/
|
*/
|
||||||
class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase
|
class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* @var DefaultNamingStrategy
|
|
||||||
*/
|
|
||||||
private static $defaultNamingStrategy;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return DefaultNamingStrategy
|
* @return DefaultNamingStrategy
|
||||||
*/
|
*/
|
||||||
static private function defaultNaming()
|
static private function defaultNaming()
|
||||||
{
|
{
|
||||||
if (self::$defaultNamingStrategy == null) {
|
return new DefaultNamingStrategy();
|
||||||
self::$defaultNamingStrategy = new DefaultNamingStrategy();
|
|
||||||
}
|
}
|
||||||
return self::$defaultNamingStrategy;
|
|
||||||
|
/**
|
||||||
|
* @return UnderscoreNamingStrategy
|
||||||
|
*/
|
||||||
|
static private function underscoreNamingLower()
|
||||||
|
{
|
||||||
|
return new UnderscoreNamingStrategy(UnderscoreNamingStrategy::CASE_LOWER);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return UnderscoreNamingStrategy
|
||||||
|
*/
|
||||||
|
static private function underscoreNamingUpper()
|
||||||
|
{
|
||||||
|
return new UnderscoreNamingStrategy(UnderscoreNamingStrategy::CASE_UPPER);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -36,6 +45,7 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase
|
|||||||
static public function dataClassToTableName()
|
static public function dataClassToTableName()
|
||||||
{
|
{
|
||||||
return array(
|
return array(
|
||||||
|
// DefaultNamingStrategy
|
||||||
array(self::defaultNaming(), 'SomeClassName',
|
array(self::defaultNaming(), 'SomeClassName',
|
||||||
'SomeClassName'
|
'SomeClassName'
|
||||||
),
|
),
|
||||||
@ -45,6 +55,20 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase
|
|||||||
array(self::defaultNaming(), 'Name',
|
array(self::defaultNaming(), 'Name',
|
||||||
'\Some\Class\Name'
|
'\Some\Class\Name'
|
||||||
),
|
),
|
||||||
|
|
||||||
|
// UnderscoreNamingStrategy
|
||||||
|
array(self::underscoreNamingLower(), 'some_class_name',
|
||||||
|
'\Name\Space\SomeClassName'
|
||||||
|
),
|
||||||
|
array(self::underscoreNamingLower(), 'name',
|
||||||
|
'\Some\Class\Name'
|
||||||
|
),
|
||||||
|
array(self::underscoreNamingUpper(), 'SOME_CLASS_NAME',
|
||||||
|
'\Name\Space\SomeClassName'
|
||||||
|
),
|
||||||
|
array(self::underscoreNamingUpper(), 'NAME',
|
||||||
|
'\Some\Class\Name'
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,6 +88,7 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase
|
|||||||
static public function dataPropertyToColumnName()
|
static public function dataPropertyToColumnName()
|
||||||
{
|
{
|
||||||
return array(
|
return array(
|
||||||
|
// DefaultNamingStrategy
|
||||||
array(self::defaultNaming(), 'someProperty',
|
array(self::defaultNaming(), 'someProperty',
|
||||||
'someProperty'
|
'someProperty'
|
||||||
),
|
),
|
||||||
@ -73,6 +98,14 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase
|
|||||||
array(self::defaultNaming(), 'some_property',
|
array(self::defaultNaming(), 'some_property',
|
||||||
'some_property'
|
'some_property'
|
||||||
),
|
),
|
||||||
|
|
||||||
|
// UnderscoreNamingStrategy
|
||||||
|
array(self::underscoreNamingLower(), 'some_property',
|
||||||
|
'someProperty'
|
||||||
|
),
|
||||||
|
array(self::underscoreNamingUpper(), 'SOME_PROPERTY',
|
||||||
|
'someProperty'
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,7 +129,12 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase
|
|||||||
static public function dataReferenceColumnName()
|
static public function dataReferenceColumnName()
|
||||||
{
|
{
|
||||||
return array(
|
return array(
|
||||||
|
// DefaultNamingStrategy
|
||||||
array(self::defaultNaming(), 'id'),
|
array(self::defaultNaming(), 'id'),
|
||||||
|
|
||||||
|
// UnderscoreNamingStrategy
|
||||||
|
array(self::underscoreNamingLower(), 'id'),
|
||||||
|
array(self::underscoreNamingUpper(), 'ID'),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -121,15 +159,21 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase
|
|||||||
static public function dataJoinColumnName()
|
static public function dataJoinColumnName()
|
||||||
{
|
{
|
||||||
return array(
|
return array(
|
||||||
|
// DefaultNamingStrategy
|
||||||
array(self::defaultNaming(), 'someColumn_id',
|
array(self::defaultNaming(), 'someColumn_id',
|
||||||
'someColumn', null,
|
'someColumn', null,
|
||||||
),
|
),
|
||||||
array(self::defaultNaming(), 'somecolumn_id',
|
|
||||||
'somecolumn', null,
|
|
||||||
),
|
|
||||||
array(self::defaultNaming(), 'some_column_id',
|
array(self::defaultNaming(), 'some_column_id',
|
||||||
'some_column', null,
|
'some_column', null,
|
||||||
),
|
),
|
||||||
|
|
||||||
|
// UnderscoreNamingStrategy
|
||||||
|
array(self::underscoreNamingLower(), 'some_column_id',
|
||||||
|
'someColumn', null,
|
||||||
|
),
|
||||||
|
array(self::underscoreNamingUpper(), 'SOME_COLUMN_ID',
|
||||||
|
'someColumn', null,
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -153,6 +197,7 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase
|
|||||||
static public function dataJoinTableName()
|
static public function dataJoinTableName()
|
||||||
{
|
{
|
||||||
return array(
|
return array(
|
||||||
|
// DefaultNamingStrategy
|
||||||
array(self::defaultNaming(), 'someclassname_classname',
|
array(self::defaultNaming(), 'someclassname_classname',
|
||||||
'SomeClassName', 'Some\ClassName', null,
|
'SomeClassName', 'Some\ClassName', null,
|
||||||
),
|
),
|
||||||
@ -162,6 +207,27 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase
|
|||||||
array(self::defaultNaming(), 'name_classname',
|
array(self::defaultNaming(), 'name_classname',
|
||||||
'\Some\Class\Name', 'ClassName', null,
|
'\Some\Class\Name', 'ClassName', null,
|
||||||
),
|
),
|
||||||
|
|
||||||
|
// UnderscoreNamingStrategy
|
||||||
|
array(self::underscoreNamingLower(), 'some_class_name_class_name',
|
||||||
|
'SomeClassName', 'Some\ClassName', null,
|
||||||
|
),
|
||||||
|
array(self::underscoreNamingLower(), 'some_class_name_class_name',
|
||||||
|
'\SomeClassName', 'ClassName', null,
|
||||||
|
),
|
||||||
|
array(self::underscoreNamingLower(), 'name_class_name',
|
||||||
|
'\Some\Class\Name', 'ClassName', null,
|
||||||
|
),
|
||||||
|
|
||||||
|
array(self::underscoreNamingUpper(), 'SOME_CLASS_NAME_CLASS_NAME',
|
||||||
|
'SomeClassName', 'Some\ClassName', null,
|
||||||
|
),
|
||||||
|
array(self::underscoreNamingUpper(), 'SOME_CLASS_NAME_CLASS_NAME',
|
||||||
|
'\SomeClassName', 'ClassName', null,
|
||||||
|
),
|
||||||
|
array(self::underscoreNamingUpper(), 'NAME_CLASS_NAME',
|
||||||
|
'\Some\Class\Name', 'ClassName', null,
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -187,12 +253,28 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase
|
|||||||
static public function dataJoinKeyColumnName()
|
static public function dataJoinKeyColumnName()
|
||||||
{
|
{
|
||||||
return array(
|
return array(
|
||||||
|
// DefaultNamingStrategy
|
||||||
array(self::defaultNaming(), 'someclassname_id',
|
array(self::defaultNaming(), 'someclassname_id',
|
||||||
'SomeClassName', null, null,
|
'SomeClassName', null, null,
|
||||||
),
|
),
|
||||||
array(self::defaultNaming(), 'name_identifier',
|
array(self::defaultNaming(), 'name_identifier',
|
||||||
'\Some\Class\Name', 'identifier', null,
|
'\Some\Class\Name', 'identifier', null,
|
||||||
),
|
),
|
||||||
|
|
||||||
|
// UnderscoreNamingStrategy
|
||||||
|
array(self::underscoreNamingLower(), 'some_class_name_id',
|
||||||
|
'SomeClassName', null, null,
|
||||||
|
),
|
||||||
|
array(self::underscoreNamingLower(), 'class_name_identifier',
|
||||||
|
'\Some\Class\ClassName', 'identifier', null,
|
||||||
|
),
|
||||||
|
|
||||||
|
array(self::underscoreNamingUpper(), 'SOME_CLASS_NAME_ID',
|
||||||
|
'SomeClassName', null, null,
|
||||||
|
),
|
||||||
|
array(self::underscoreNamingUpper(), 'CLASS_NAME_IDENTIFIER',
|
||||||
|
'\Some\Class\ClassName', 'IDENTIFIER', null,
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user