【问题标题】: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。
【解决方案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 时连接到数据库。