我正在尝试将SQL语句翻译成Propel,但没有那么成功。我有这个SQL语句:
SELECT id, param1, param2
FROM Field1
WHERE id
in
(
SELECT DISTINCT Field1_id
FROM Field2
WHERE id in
(
SELECT DISTINCT `Field2_id`
FROM `Field3`
WHERE
`param7` is null
AND param5 > 40
)
) LIMIT 0, 1000
我开始以原始的方式做这件事:
$connection = Propel::getConnection();
$query = "my Query";
$statement = $connection->prepare($query);
$statement->execute();
$results = $statement->fetch(PDO::FETCH_ASSOC);
这很好用,但我不能对$ results做任何Propel Actions因为它是一个数组。
那么如何在没有原始方式的情况下将此SQL转换为Propel?
答案 0 :(得分:1)
一个很好的快速解决方法是在数据库中创建一个视图,并在Propel中为该视图设置一个只读表。然后,您可以像使用普通的Propel表一样使用视图模型。现在当然这个是作弊,并且受到ORM纯粹主义者的不满,但它会让你在短期内进行。
我的方法是尝试重构回我已经用于简单查询的表,但对于大型的中央查询(特别是用于主要下钻屏幕的复杂查询)我已经更多了非常乐意永久保持观点。
答案 1 :(得分:0)
据我所知,Propel不处理嵌套查询。相反,您可以写table subqueries。