lat*_*ata 0 union doctrine symfony1 subquery symfony-1.4
我想在doctrine中进行这个sql查询:
SELECT *
FROM (
(SELECT *, e1.stop_date as sort_date FROM `event` e1 WHERE ...)
UNION
(SELECT *, e2.start_date as sort_date FROM `event` e2 WHERE ...)
) e3
ORDER BY e3.sort_date
Run Code Online (Sandbox Code Playgroud)
我想将symfony模型的结果连接到事件表,比如使用:
Doctrine_Core::getTable('Event')->createQuery('e')
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
您可以尝试使用Doctrine的DQL语言进行复杂查询:
$q = Doctrine_Query::create()
->select('u.id')
->from('User u')
->where('u.id NOT IN (SELECT u2.id FROM User u2 INNER JOIN u2.Groups g)');
echo $q->getSqlQuery();
Run Code Online (Sandbox Code Playgroud)
http://doctrine.readthedocs.org/en/latest/en/manual/dql-doctrine-query-language.html#subqueries
或者,您也可以在数据库中创建一个View,并将其用作源表,以便进行更简单的Doctrine查询.
CREATE VIEW view_name AS
SELECT *
FROM (
(SELECT *, e1.stop_date as sort_date FROM `event` e1 WHERE ...)
UNION
(SELECT *, e2.start_date as sort_date FROM `event` e2 WHERE ...)
) e3
ORDER BY e3.sort_date
Run Code Online (Sandbox Code Playgroud)
我在我的项目中使用了这两种方法并且运行良好,这取决于您访问数据的方式,是否需要更新,是否允许创建视图等.