2011-11-23 22 views
35

¿Conoce cómo obtener el nombre de la tabla a partir de una declaración de entidad en mi clase controladornombre de la tabla de clase de entidad

Entidad Clase

<?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 

Ahora me gustaría obtener el nombre de la tabla de la Entidad de usuario, ¿cómo haré esto en mi controlador Symfony2?

Respuesta

80

Desde dentro de un controlador se debería utilizar:

$em = $this->getDoctrine()->getManager(); 
$tableName = $em->getClassMetadata('StoreBundle:User')->getTableName(); 

Tenga en cuenta que el método getClassMetadata devuelve un montón de información interesante acerca de la entidad.

+1

¿Qué tal unir el nombre de la tabla? ¿Sabes cómo conseguir eso? –

+5

Con php 5.5+ puede usar la clase constante incorporada clase ::. '' '$ tableName = $ em-> getClassMetadata (User :: class) -> getTableName();' '' –

0

con Symfony 2.3 & Doctrina 2 Esto funcionó para mí:

// 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); 
    } 

} 
2

que necesitaba para averiguar el nombre de una tabla de asignación en una relación de muchos a muchos (usando FOSUserBundle). Tal vez esto ayude a alguien:

$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']; 
Cuestiones relacionadas