【问题标题】:DBAL Connection to database from Entity in Symfony2从 Symfony2 中的实体到数据库的 DBAL 连接
【发布时间】: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");
    }
}

【问题讨论】:

    标签: database symfony entity dbal


    【解决方案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');
    

    【讨论】:

      猜你喜欢
      • 2015-08-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-17
      • 2016-06-04
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      相关资源
      最近更新 更多