forked from GNUsocial/gnu-social
[DB] Add table map which allows using table names rather than entities in Doctrine operations
This commit is contained in:
parent
a5505bf848
commit
1fda65bc3d
@ -48,6 +48,17 @@ abstract class DB
|
|||||||
self::$em = $m;
|
self::$em = $m;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Table name to class map, used to allow specifying table names instead of classes in doctrine calls
|
||||||
|
*/
|
||||||
|
private static array $table_map = [];
|
||||||
|
public static function initTableMap()
|
||||||
|
{
|
||||||
|
foreach (self::$em->getMetadataFactory()->getAllMetadata() as $meta) {
|
||||||
|
self::$table_map[$meta->getTableName()] = $meta->getMetadataValue('name');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Perform a Doctrine Query Language query
|
* Perform a Doctrine Query Language query
|
||||||
*/
|
*/
|
||||||
@ -162,18 +173,9 @@ abstract class DB
|
|||||||
*/
|
*/
|
||||||
public static function __callStatic(string $name, array $args)
|
public static function __callStatic(string $name, array $args)
|
||||||
{
|
{
|
||||||
if (($args[0] ?? '') == 'favourite') {
|
if (in_array($name, ['find', 'getReference', 'getPartialReference', 'getRepository'])
|
||||||
$args[0] = 'Plugin\Favourite\Entity\Favourite';
|
&& !Formatting::startsWith($args[0], '\\')) {
|
||||||
} else {
|
$args[0] = self::$table_map[$args[0]];
|
||||||
// TODO Plugins
|
|
||||||
// If the method is one of the following and the first argument doesn't look like a FQCN, add the prefix
|
|
||||||
$pref = '\App\Entity\\';
|
|
||||||
if (in_array($name, ['find', 'getReference', 'getPartialReference', 'getRepository'])
|
|
||||||
&& preg_match('/\\\\/', $args[0]) === 0
|
|
||||||
&& Formatting::startsWith($args[0], $pref) === false) {
|
|
||||||
$args[0] = $pref . ucfirst(Formatting::snakeCaseToCamelCase($args[0]));
|
|
||||||
$args[0] = preg_replace('/Gsactor/', 'GSActor', $args[0]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return self::$em->{$name}(...$args);
|
return self::$em->{$name}(...$args);
|
||||||
|
@ -147,6 +147,8 @@ class GNUsocial implements EventSubscriberInterface
|
|||||||
Formatting::setTwig($this->twig);
|
Formatting::setTwig($this->twig);
|
||||||
Cache::setupCache();
|
Cache::setupCache();
|
||||||
|
|
||||||
|
DB::initTableMap();
|
||||||
|
|
||||||
// Events are proloaded on compilation, but set at runtime
|
// Events are proloaded on compilation, but set at runtime
|
||||||
$this->module_manager->loadModules();
|
$this->module_manager->loadModules();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user