Primary key ranges in Propel ORM
Wednesday, May 23rd, 2012 | Programming, Tech
If you’re using Propel ORM, you may want to select a range of primary keys. According to the documentation, you should be able to do this using code similar to the following.
BookQuery::create()->filterById(array('min' => 1, 'max' => 100));
However, what you find you get is that will return books with the ID of 1 and 100, but nothing else.
That is because Propel does not support ranges on IDs. This has been noted on the Propel GitHub issue tracker and will be resolved at some point in the future, but until then you have two possibilities.
Firstly, if you’re only looking to specify one value in the range, you can pass a criteria constant to filter by that.
BookQuery::create()->filterById(30, \Criteria::GREATER_THAN)->find();
You can also use LESS_THAN in the same way. Or, if you need a range with both ends specified, you can resort to the where() method.
BookQuery::create()->where('id BETWEEN 1 AND 100')->find();
Though that method requires you to use the database column names, rather than the PHP names used in Propel (yours may be the same, but I often rename mine for legacy reasons).
If you’re using Propel ORM, you may want to select a range of primary keys. According to the documentation, you should be able to do this using code similar to the following.
BookQuery::create()->filterById(array('min' => 1, 'max' => 100));
However, what you find you get is that will return books with the ID of 1 and 100, but nothing else.
That is because Propel does not support ranges on IDs. This has been noted on the Propel GitHub issue tracker and will be resolved at some point in the future, but until then you have two possibilities.
Firstly, if you’re only looking to specify one value in the range, you can pass a criteria constant to filter by that.
BookQuery::create()->filterById(30, \Criteria::GREATER_THAN)->find();
You can also use LESS_THAN in the same way. Or, if you need a range with both ends specified, you can resort to the where() method.
BookQuery::create()->where('id BETWEEN 1 AND 100')->find();
Though that method requires you to use the database column names, rather than the PHP names used in Propel (yours may be the same, but I often rename mine for legacy reasons).