2013-08-03 28 views
3

我创造了这个实体:DBAL到数据库的连接,从实体中的Symfony2

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

回答

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'); 
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)); 
} 
+1

其实在我的例子中,实体没有映射到一个真正的表,所以我喜欢做DBAL连接编写自定义查询来自实体。 – lepix

+0

public setName($ name) - > public function setName($ name)? – rpg600

+0

是的,对不起。我编辑过。 – lepix

相关问题