2012-10-12 14 views
21

Làm cách nào để tạo truy vấn SQL tùy chỉnh trong Symfony2 bằng Doctrine? Hoặc không có Doctrine, tôi không quan tâm.Symfony2 & Doctrine: Tạo SQL-Query tùy chỉnh

Không làm việc như thế này:

$em = $this->getDoctrine()->getEntityManager(); 
    $em->createQuery($sql); 
    $em->execute(); 

Cảm ơn.

Trả lời

72

Bạn có thể nhận các đối tượng kết nối trực tiếp từ Entity Manager, và chạy các truy vấn SQL trực tiếp thông qua rằng:

$em = $this->getDoctrine()->getManager(); // ...or getEntityManager() prior to Symfony 2.1 
$connection = $em->getConnection(); 
$statement = $connection->prepare("SELECT something FROM somethingelse WHERE id = :id"); 
$statement->bindValue('id', 123); 
$statement->execute(); 
$results = $statement->fetchAll(); 

Tuy nhiên, tôi muốn khuyên bạn lại trừ khi nó thực sự cần thiết ... DQL thuyết có thể xử lý gần như bất kỳ truy vấn nào bạn có thể cần.

tài liệu chính thức: http://doctrine-dbal.readthedocs.org/en/latest/reference/data-retrieval-and-manipulation.html

+10

Ngoài ra còn có các điều khoản SQL Native trong Học thuyết: http://docs.doctrine-project.org/en/ mới nhất/tham khảo/native-sql.html – Orbling

+0

Hoạt động như một sự quyến rũ, cảm ơn :) – a1337q

+0

Hoàn hảo, cảm ơn rất nhiều !! – iarroyo

1

Bạn có thể thực thi mã này nó hoạt động:

$em = $this->getDoctrine()->getEntityManager(); 
$result= $em->createQuery($sql)->getResult(); 
+6

'$ em-> createQuery()' không thực hiện SQL, nhưng DQL. – loostro