从 Symfony2 中的实体到数据库的 DBAL 连接
Posted
技术标签:
【中文标题】从 Symfony2 中的实体到数据库的 DBAL 连接【英文标题】:DBAL Connection to database from Entity in Symfony2 【发布时间】:2013-08-04 12:37:36 【问题描述】:我已经创建了这个实体:
<?php
namespace MyProject\MyBundle\Entity;
class User
private $id;
function __construct($id)
$this->id = $id;
public function setName($name)
$sql = "UPDATE users SET name=:name WHERE id=:id";
$stmt = $this->connection->prepare($sql);
$stmt->execute(array('name' => '$name', 'id' => $this->id));
)
如何从它连接到数据库?
我从这个控制器调用这个实体:
<?php
namespace MyProject\MyBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use MyProject\MyBundle\Entity;
class MyController extends Controller
public function indexAction()
$user = new User(1);
$user->setName("Tom");
【问题讨论】:
【参考方案1】:您需要使用学说实体管理器http://symfony.com/doc/current/book/doctrine.html#persisting-objects-to-the-database
编辑: 不要在模型中查询,而是在实体存储库中查询,如下所示:
public function setName(name, id)
$sql = "UPDATE users SET name=:name WHERE id=:id";
$stmt = $this->getEntityManager()
->getConnection()
->prepare($sql);
$stmt->execute(array('name' => $name, 'id' => $id));
【讨论】:
实际上我的例子中的实体并没有映射到一个真实的表,所以我想做一个 DBAL 连接来编写一个来自实体的自定义查询。 public setName($name) -> public function setName($name) ?【参考方案2】:有一个食谱文章:http://symfony.com/doc/current/cookbook/doctrine/dbal.html,它展示了如何在不通过实体管理器的情况下获取和使用 dbal 连接。
但是像@Rpg600 我有点不明白你为什么要这么做。
您可能应该将此作为服务并注入连接。
也许:
class UserCustomQuery($conn)
public function __construct($conn) $this->conn = $conn;
public function setName($userId,$name)
....
控制器:
$userCustomQuery = $this->get('user.custom.query');
$userCustomQuery->setName(1,'Tom');
【讨论】:
以上是关于从 Symfony2 中的实体到数据库的 DBAL 连接的主要内容,如果未能解决你的问题,请参考以下文章
PostgreSQL 咨询锁不适用于 Doctrine 的 DBAL
Symfony2/Doctrine:如何从实体类中持久化一个实体?
Symfony 2.8(Wamp):[Doctrine\DBAL\Exception\ConnectionException] PDOException:SQLSTATE[HY000] [2002]