50 votes

Obtenir le nom de la table de la classe d'entité

Savez-vous comment obtenir le nom de la table à partir d'une déclaration d'entité dans ma classe de contrôleur

Classe d'entité

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

J'aimerais maintenant obtenir le nom de la table de l'entité User, comment le ferais-je dans mon contrôleur Symfony2 ?

117voto

Arms Points 8729

À partir d'un contrôleur, vous utiliseriez :

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

Notez que la getClassMetadata renvoie un tas d'informations intéressantes sur l'entité.

5voto

con Points 769

J'avais besoin de trouver le nom d'une table de mappage dans une relation plusieurs-à-plusieurs (à l'aide de FOSUserBundle). Peut-être que cela aide quelqu'un :

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

0voto

jamie0726 Points 1017

Avec Symfony 2.3 & Doctrine 2, cela a fonctionné pour moi :

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

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X