从Doctrine获取实体的数组/列表

时间:2013-02-22 19:11:50

标签: php database doctrine entities

这可能很简单,但我找不到办法做到这一点。

有没有办法获得Doctrine管理的实体的类名列表?类似的东西:

$entities = $doctrine->em->getEntities();

其中$entities是一个类似array('User', 'Address', 'PhoneNumber')等的数组......

4 个答案:

答案 0 :(得分:23)

我知道这个问题很老,但是如果有人仍然需要这样做(在Doctrine 2.4.0中测试过):

$classes = array();
$metas = $entityManager->getMetadataFactory()->getAllMetadata();
foreach ($metas as $meta) {
    $classes[] = $meta->getName();
}
var_dump($classes);

Source

答案 1 :(得分:1)

获取所有实体(带有名称空间)的类名的另一种方法是:

$entitiesClassNames = $entitManager->getConfiguration()->getMetadataDriverImpl()->getAllClassNames();

答案 2 :(得分:0)

不幸的是,不应该在文件结构中组织您的类。示例:我正在处理的项目现在将其所有的doctrine类都放在init / classes文件夹中。

答案 3 :(得分:0)

没有内置功能。但您可以使用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;
}

请注意,为简单起见,上面的代码示例不使用命名空间。您必须在应用程序中相应地进行调整。

那说你没解释为什么你需要找到实体类列表。也许,对于你想要解决的问题,有一个更好的解决方案。