【问题标题】:Symfony 3, query without Entity but with doctrineSymfony 3,没有实体但有教义的查询
【发布时间】:2017-06-26 14:13:58
【问题描述】:

我创建了一个 API 系统。一切都很完美,它可以与 Elastic as Db 一起使用。不幸的是,一个函数需要在旧的 mysql 数据库中添加/编辑/检索一行。

我不想在任何时候都连接到数据库,但只是在我需要的时候。我想使用 createQueryBuilder 但没有实体。有可能吗?

【问题讨论】:

  • 最后,我与实体合作并停止...谢谢大家!

标签: php symfony doctrine-orm


【解决方案1】:

您可以使用 DBAL 进行简单的旧查询,该查询将返回一个数组:

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\EntityRepository;

class MyRepository extends EntityRepository
{
    public function findSmth()
    {
        $conn = $this->getEntityManager()->getConnection();
        $sql = 'SELECT * FROM my_table';
        $stmt = $conn->prepare($sql);
        $stmt->execute();

        var_dump($stmt->fetchAll());die;
    }
}

QueryBuilder 只是转换为 DQL,而 DQL 为您的对象模型提供查询功能。 所以,我认为你不能在没有实体的情况下使用 QB。

【讨论】:

  • 嘿@matko,你在函数这个词上有错字。
【解决方案2】:

您可以在学说配置中添加新连接:

config.yml

....
doctrine:
    dbal:
        default_connection: default

        connections:
            default:
                ...
            old_mysql_db
                driver:   pdo_mysql
                host:     127.0.0.1
                port:     3306
                dbname:   dbname
                user:     user
                password: password
    orm:
        ...
...

并在控制器中使用此连接

...
$conn = $this->getConnection('old_mysql_db');
$qb = $conn->createQueryBuilder(); // \Doctrine\DBAL\Query\QueryBuilder
...

Doctrine 在使用该数据库的第一个 sql-query 时连接到数据库。

【讨论】:

    【解决方案3】:

    当然,这里有记录

    http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/query-builder.html

    1. SQL 查询生成器

    Doctrine 2.1 为 SQL 语言提供了一个强大的查询构建器。此 QueryBuilder 对象具有向 SQL 语句添加部分的方法。如果您构建了完整状态,则可以使用生成它的连接来执行它。 API 与 DQL 查询生成器的 API 大致相同。

    您可以通过调用 Doctrine\DBAL\Connection#createQueryBuilder 来访问 QueryBuilder

    从控制器内部,我认为您应该使用 $this-&gt;getDoctrine()-&gt;getManager()-&gt;getConnection()-&gt;createQueryBuilder() 并触发您的原始 SQL

    【讨论】:

      猜你喜欢
      • 2018-04-28
      • 2018-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 2017-11-07
      相关资源
      最近更新 更多