这可能很简单,但是我找不到解决方法。
是否有任何方法可以获取Doctrine管理的实体的类名列表?类似于:
$entities = $doctrine->em->getEntities();
其中$entities
是具有array('User', 'Address', 'PhoneNumber')
等的数组...
我知道这个问题很旧,但是如果有人仍然需要这样做(在教义2.4.0中测试):
$classes = array();
$metas = $entityManager->getMetadataFactory()->getAllMetadata();
foreach ($metas as $meta) {
$classes[] = $meta->getName();
}
var_dump($classes);
[不幸的是,您的类应该以文件结构组织。示例:我正在处理的项目现在在init / classes文件夹中具有所有其学说类。
没有内置功能。但是您可以使用marker/tagger interface标记属于您的应用程序的实体类。然后,您可以使用函数“ get_declared_classes”和“ is_subclass_of”找到实体类的列表。
例如:
/**
* Provides a marker interface to identify entity classes related to the application
*/
interface MyApplicationEntity {}
/**
* @Entity
*/
class User implements MyApplicationEntity {
// Your entity class definition goes here.
}
/**
* Finds the list of entity classes. Please note that only entity classes
* that are currently loaded will be detected by this method.
* For ex: require_once('User.php'); or use User; must have been called somewhere
* within the current execution.
* @return array of entity classes.
*/
function getApplicationEntities() {
$classes = array();
foreach(get_declared_classes() as $class) {
if (is_subclass_of($class, "MyApplicationEntity")) {
$classes[] = $class;
}
}
return $classes;
}
[请注意,为简单起见,我上面的代码示例未使用名称空间。您必须在应用程序中进行相应的调整。
那是您没有解释为什么需要查找实体类列表。也许,您要解决的问题有更好的解决方案。
获得所有实体(带有名称空间)的类名的另一种方法是:
$entitiesClassNames = $entitManager->getConfiguration()->getMetadataDriverImpl()->getAllClassNames();