Symfony从数据库表中获取所有字段名称

Ein*_*ius 4 symfony doctrine-orm

我需要获取所有数据库表字段名称.我已经尝试过使用ClassMetadata不幸的getColumnNames()是不会返回关系字段名称.和method getAssociationNames()返回不同名称的实体属性的名称,也可能包含使用oneToMany关系时数据库中不存在的字段.

正如人们提到的那样,这可能是重复的.不是.获取doctrine2实体中的列名称可能是类似的问题,但getFieldNames方法不返回与其他实体有关系的字段名称.

那么如何从数据库表中获取所有列名?

Gui*_*ege 11

我用这段代码解决了这个问题:

$class = $this->em->getClassMetadata('Entity');
    $fields = [];
    if (!empty($class->discriminatorColumn)) {
        $fields[] = $class->discriminatorColumn['name'];
    }
    $fields = array_merge($class->getColumnNames(), $fields);
    foreach ($fields as $index => $field) {
        if ($class->isInheritedField($field)) {
            unset($fields[$index]);
        }
    }
    foreach ($class->getAssociationMappings() as $name => $relation) {
        if (!$class->isInheritedAssociation($name)){
            foreach ($relation['joinColumns'] as $joinColumn) {
                $fields[] = $joinColumn['name'];
            }
        }
    }
    return $fields;
Run Code Online (Sandbox Code Playgroud)

  • 不确定在迭代数组时删除数组的元素是否是个好主意。 (2认同)