web-dev-qa-db-ja.com

Doctrineエンティティプロパティのメタデータを読み取る

私はエンティティに従う必要があります:

/**
 * ProductService
 *
 * @ORM\Table(name="sf_products_services")
 * @ORM\Entity(repositoryClass="Evo\BackendBundle\Entity\ProductServiceRepository")
 */
class ProductService
{
    [...]

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=150)
     */
    protected $name;

    [...]

$ nameプロパティの「長さ」の値を読み取るにはどうすればよいですか?私はdoctrineメタデータを使用することができると読みましたが、それを使用する方法とこれらのデータを読み取る方法については何も見つかりません。

16
VaN

@wonde回答に従って、次のようにDoctrineメタデータ情報を介して必要な情報を読むことができます。

    $doctrine = $this->getContainer()->get("doctrine");
    $em = $doctrine->getManager();

    $className = "Evo\BackendBundle\Entity\ProductService";

    $metadata = $em->getClassMetadata($className);

    $nameMetadata = $metadata->fieldMappings['name'];

    echo $nameMetadata['type'];  //print "string"
    echo $nameMetadata['length']; // print "150"

この助けを願っています

39
Matteo

getClassMetadata(mixed $ className)クラスのORMメタデータ記述子を返します

例えば

$metadata = $entityManager->getClassMetadata($className);

「クラス名は、(get_class($ obj)によって返されるので)先頭にバックスラッシュがない完全修飾クラス名であるか、エイリアスされたクラス名でなければなりません。例:MyProject\Domain\User sales:PriceRequest "

9
wonde