Symfony 从 String 类声明中获取 className 对象

Posted

技术标签:

【中文标题】Symfony 从 String 类声明中获取 className 对象【英文标题】:Symfony get className object from String class declaration 【发布时间】:2021-07-24 22:16:59 【问题描述】:

我有这段代码返回第二行中声明的 className 的列名:

 public function listColumns(EntityManagerInterface $em  ) 
    $class = $em->getClassMetadata(Assure::class);
    $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;

我正在尝试使此函数可参数化,以便每次我尝试获取其列的表/类名时都可以给出它

【问题讨论】:

【参考方案1】:

这是一种可能的解决方案,可以不同地执行我想要的操作(提取表列名称):

   public function listColumns2(EntityManagerInterface $em  ) 

    $conn = $this->getEntityManager()->getConnection();

    $sql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 
           N'Assure' ";
    $stmt = $conn->prepare($sql);
    $stmt->execute();

    return $stmt->fetchAllAssociative();
   

【讨论】:

以上是关于Symfony 从 String 类声明中获取 className 对象的主要内容,如果未能解决你的问题,请参考以下文章

Symfony - Doctrine实体的返回类型

Symfony 4,从自定义类(不是控制器类)获取项目的根路径

Symfony4 使用外部类库作为服务

Mockery, Codeception 和 Symfony - 无法重新声明类

c++ string类的常用方法

声明后初始化C ++模板类