DBAL从Symfony2中的实体连接到数据库

时间:2013-08-03 07:30:35

标签: database symfony entity dbal

我创建了这个实体:

<?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");
    }
}

2 个答案:

答案 0 :(得分:3)

有一本食谱文章: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');

答案 1 :(得分:2)

您需要使用学说实体经理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));
}