mirror of
https://github.com/wallabag/wallabag.git
synced 2024-06-28 01:50:42 +00:00
84 lines
2 KiB
PHP
84 lines
2 KiB
PHP
<?php
|
|
|
|
namespace Wallabag\CoreBundle\Doctrine\Mapping;
|
|
|
|
use Doctrine\ORM\Mapping\NamingStrategy;
|
|
|
|
/**
|
|
* Puts a prefix to each table.
|
|
*
|
|
* Solution from :
|
|
* - http://stackoverflow.com/a/23860613/569101
|
|
* - http://doctrine-orm.readthedocs.org/en/latest/reference/namingstrategy.html
|
|
*/
|
|
class PrefixedNamingStrategy implements NamingStrategy
|
|
{
|
|
protected $prefix = '';
|
|
|
|
public function __construct($prefix)
|
|
{
|
|
$this->prefix = (string) $prefix;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function classToTableName($className)
|
|
{
|
|
return strtolower($this->prefix.substr($className, strrpos($className, '\\') + 1));
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function propertyToColumnName($propertyName, $className = null)
|
|
{
|
|
return $propertyName;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function referenceColumnName()
|
|
{
|
|
return 'id';
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function joinColumnName($propertyName)
|
|
{
|
|
return $propertyName.'_'.$this->referenceColumnName();
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function joinTableName($sourceEntity, $targetEntity, $propertyName = null)
|
|
{
|
|
// for join table we don't want to have both table concatenated AND prefixed
|
|
// we just want the whole table to prefixed once
|
|
// ie: not "wallabag_entry_wallabag_tag" but "wallabag_entry_tag"
|
|
$target = substr($targetEntity, strrpos($targetEntity, '\\') + 1);
|
|
|
|
return strtolower($this->classToTableName($sourceEntity).'_'.$target);
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function joinKeyColumnName($entityName, $referencedColumnName = null)
|
|
{
|
|
return strtolower($this->classToTableName($entityName).'_'.($referencedColumnName ?: $this->referenceColumnName()));
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function embeddedFieldToColumnName($propertyName, $embeddedColumnName, $className = null, $embeddedClassName = null)
|
|
{
|
|
return $propertyName.'_'.$embeddedColumnName;
|
|
}
|
|
}
|