Can/should One use any ORM Solution is a Complex Situation like this ?
can this even be done with Propel
or Doctrine
? at the moment I am using Propel. So I'd be glad If there is Propel solution for it.
If I do a direct query with propel what are the suggestion ?
SELECT I.*,((I.width*175)/I.height) as relativeWidth FROM
(SELECT * FROM Image WHERE owner = 1 LIMIT 5, 10) I
order by relativeWidth asc
and additionally What is the standard solution for the scenario where one needs to exequte really complex queries in most of the places in the application ?
There is a LIMIT 5, 10
that I use for Pagination. and its in inner Query. If its in View how can I control Pagination ?
Your query can be written as following with Propel 1.6.3:
<?php
// SELECT * FROM Image WHERE owner = 1 LIMIT 5, 10
$subQuery = ImageQuery::create()
->filterByOwner(1)
->limit(10)
->offset(5)
;
$query = ImageQuery::create()
->addSelectQuery($subQuery, 'I', true)
->withColumn('((I.WIDTH*175)/I.HEIGHT)', 'relativeWidth') // ((I.width*175)/I.height) as relativeWidth
->orderBy('relativeWidth') // default is 'asc'
;
$params = array();
var_dump(\BasePeer::createSelectSql($query, $params));
Output is:
SELECT I.ID, I.WIDTH, I.HEIGHT, I.OWNER, ((I.WIDTH*175)/I.HEIGHT) AS relativeWidth
FROM (
SELECT image.ID, image.WIDTH, image.HEIGHT, image.OWNER
FROM `image`
WHERE image.OWNER=:p1 LIMIT 5, 10
) AS I
ORDER BY relativeWidth ASC
Note the :p1
is the binding parameter related to the owner value.
So it's really easy to create complex queries using Propel :)
William