DBAL到数据库的连接,从实体中的Symfony2
问题描述:
我创造了这个实体: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");
}
}
答
有食谱文章: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');
答
您需要使用的学说实体管理器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连接编写自定义查询来自实体。 – lepix
public setName($ name) - > public function setName($ name)? – rpg600
是的,对不起。我编辑过。 – lepix