Доктрина получает все имена полей с ассоциациями

Я уже знаю, как получить имена полей для сущности, но как получить имена классов для всех ассоциаций?

$em->getClassMetadata('Product')->getFieldNames(); 

Это получает свойство класса только, но я ожидаю получить имена ассоциаций внутри вложенного массива, например, если у меня есть клиент, связанный с продуктом, я бы хотел получить все имена свойств класса клиента.

Solutions Collecting From Web of "Доктрина получает все имена полей с ассоциациями"

Вы также можете получить соответствующие имена полей, а затем объединить их

 $properties = $em->getClassMetadata('YourBundle:Product')->getFieldNames(); $output = array_merge( $properties, $em->getClassMetadata('YourBundle:Product')->getAssociationNames() ); 

Просто небольшой намек.

Я бы предпочел перестроить способ организации вашей схемы, чтобы правильно получить все связанные поля. Например, согласно этой строке вашего вопроса «если у меня есть клиент, связанный с продуктом», я считаю, что у вас есть отношения по крайней мере один к одному или один ко многим между клиентом и продуктом. Если вы заявляете эти отношения в своем ORM, если вы используете YAML или аннотации или предпочитаете / уступаете, вы сможете получить имена полей с помощью стандартных методов DQL query / или get.

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

Надеюсь, это поможет, Cheers!

Я закончил тем, что объединил их в один массив, получив сначала каждое имя ассоциации, а затем имена полей для каждого имени.

Один лайнер:

array_keys ($ entityManager-> getMetadataFactory () -> getMetadataFor ($ объектные) -> reflFields)