2013-02-22 2 views
2

Это, вероятно, довольно просто, но я не могу найти способ сделать это.Получить массив/список объектов из Doctrine

Есть ли способ получить список имен классов объектов, которыми управляет Doctrine? Что-то вроде:

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

$entities где находится массив с чем-то вроде array('User', 'Address', 'PhoneNumber') и т.д ...

ответ

0

К сожалению нет, ваши занятия должны быть организованы в файловой структуре, хотя. Пример: проект, над которым я сейчас работаю, имеет все его классы доктрины в папке init/classes.

+0

Да, все они находятся в одной папке. Я просто надеялся, что будет такой простой метод. Полагаю, я мог бы добавить его, и он просто заглянет в папку моих сущностей. – celestialorb

+0

print_r (get_declared_classes()); даст вам список классов, используемых в скрипте, но он не будет ограничен вашими классами доктрины. edit: он также не будет включать под-подклассы, только классы и их подклассы. – skrilled

1

Нет встроенной функции. Но вы можете использовать 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; 
} 

Пожалуйста, обратите внимание, что мой пример кода выше не использует пространство имен для простоты ради. Вы должны будете соответствующим образом настроить его в своем приложении.

Это говорит, что вы не объяснили, почему вам нужно найти список классов сущностей. Возможно, есть лучшее решение для того, что вы пытаетесь решить.

14

Я знаю, этот вопрос старый, но в случае, если кто-то еще должен сделать это (проверено в Доктрине 2.4.0):

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

Source

Смежные вопросы