Получить имя таблицы класса сущности
Знаете ли вы, как получить имя таблицы из объявления Entity в классе контроллера
Класс сущностей
<?php
namespace Acme\StoreBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Acme\StoreBundle\Entity\User
*
* @ORM\Table(name="users")
* @ORM\Entity
*/
class User
Теперь я хотел бы получить имя таблицы объекта User, как бы это сделать в моем контроллере Symfony2?
Ответы
Ответ 1
Внутри контроллера вы должны использовать:
$em = $this->getDoctrine()->getManager();
$tableName = $em->getClassMetadata('StoreBundle:User')->getTableName();
Обратите внимание, что метод getClassMetadata
возвращает кучу интересной информации об объекте.
Ответ 2
Мне нужно было узнать имя таблицы сопоставления в отношениях "многие ко многим" (используя FOSUserBundle). Возможно, это помогает кому-то:
$groupAssociation = $this->getEntityManager()
->getClassMetadata('UOACLBundle:User')
->getAssociationsByTargetClass(Group::class);
// 'groups' is the name of the property in my User Class
$mappingTable = $groupAssociation['groups']['joinTable']['name'];
Ответ 3
С Symfony 2.3 и Doctrine 2 это сработало для меня:
// my entity is called "Record"
// Acme/DemoBundle/Entity/RecordRepository.php
class RecordRepository extends EntityRepository
{
/**
* Sets the primary table definition. The provided array supports the
* following structure:
*
* name => <tableName> (optional, defaults to class name)
* indexes => array of indexes (optional)
* uniqueConstraints => array of constraints (optional)
*
* If a key is omitted, the current value is kept.
*
* @param array $table The table description.
*/
public function setDataTableName($tableInfo) {
return $this->getEntityManager()->getClassMetadata('AcmeDemoBundle:Record')->setPrimaryTable($tableInfo);
}
}