public static function up(DAOConnected $object, LogicalObject $exp = null) { $getMethod = 'get' . ucfirst(self::$property); Assert::isTrue(method_exists($object, $getMethod)); $criteria = Criteria::create($object->dao())->addOrder(OrderBy::create(self::$property)->desc())->setLimit(1); if ($exp) { $criteria->add($exp); } $oldPosition = $object->{$getMethod}(); $criteria->add(Expression::lt(self::$property, $oldPosition)); if ($upperObject = $criteria->get()) { DaoUtils::setNullValue(self::$nullValue); DaoUtils::swap($upperObject, $object, self::$property); } }