Symfony 2 中的 Mysql 查看表

Posted

技术标签:

【中文标题】Symfony 2 中的 Mysql 查看表【英文标题】:Mysql Views Table in Symfony 2 【发布时间】:2015-07-21 15:09:26 【问题描述】:

我的数据库中有视图表,如何从这些视图中检索数据?

我尝试使用

$em = $this->getDoctrine()->getEntityManager();
$query = $em->createQuery('SELECT * FROM my_views');
$result = $query->getResult();

但它不起作用。

【问题讨论】:

您在createQuery 中编写的是本机SQL,而createQuery 需要DQL 语句。 Execute raw SQL using Doctrine 2的可能重复 您可以使用本机 sql 并将其映射到实体。见doc 是的,请参阅文档上的 examples 嗨@monkeyUser,是的,如果您想将结果映射到对象中,您需要编写相关类或使用现有类并根据需要映射字段 【参考方案1】:

如果你想执行一个简单的 SQL 查询,你可以这样做:

$con = $this->getDoctrine()->getEntityManager()->getConnection();
$stmt = $con->executeQuery('SELECT * FROM my_views');
foreach ($stmt->fetchAll() as $row)
   print_r($row);

当您使用$em->createQuery() 时,您需要使用 Doctrine 实体。

如果您想在视图中使用映射,只需创建一个实体:

namespace Your\Bundle\Entity;

/**
 * @ORM\Entity
 * @ORM\Table(name="my_view")
 */
class MyView

    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     */
    protected $id;

    /**
     * @ORM\Column(type="string")
     */
    protected $someVarcharColumn;

    public function getId()
    
        return $this->id;
    

    public function getSomeVarcharColumn()
    
        return $this->someVarcharColumn;
    

您可以像这样使用 DQL 查询它:

$results = $em->createQuery('
   SELECT v
   FROM YourBundle:MyView v
')->getResult();

【讨论】:

太好了,我可以在视图上做一个映射吗?我想要getter方法 感谢您的宝贵时间。我必须以“手动”方式创建一个实体,我不能让这个实体具有某些功能? 你可以从数据库中生成实体,但我对此并不熟悉,所以你应该阅读这里的文档:symfony.com/doc/current/cookbook/doctrine/… 我已经将symfony.com/doc/current/cookbook/doctrine/… 用于“经典”表,我不知道是否也适合视图...再次感谢! 创建视图后,我运行 schema:update 和 cache:clear 和 composer update。但它给了我一个错误找不到名为“MyView.orm.yml”的类“YourBundle\Entity\MyView”的映射文件。我正在使用 Symfony 2.8...提前致谢。

以上是关于Symfony 2 中的 Mysql 查看表的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 抛出 ServiceCircularReferenceException

Symfony 3.1 作曲家冲突

如果数据库列为空,则过滤数组 symfony 2

Symfony2 KnpPaginator 包,在我看来无法使用 2 个分页表进行排序

Symfony:通过控制器更新外键的教义

Symfony 4.4如何使用collectionType从0个字段开始