Propel2 is an open-source high-performance Object-Relational Mapping (ORM) for modern PHP

Related tags

Database php orm


Propel2 is an open-source Object-Relational Mapping (ORM) for PHP.

Github actions Status codecov Code Climate Minimum PHP Version License Gitter


Propel uses the following Symfony Components:

Propel primarily relies on Composer to manage dependencies, but you also can use ClassLoader (see the autoload.php.dist file for instance).


Read the Propel documentation.


Everybody can contribute to Propel. Just fork it, and send Pull Requests. You have to follow Propel Coding Standards and provides unit tests as much as possible. Also check out the roadmap to get an overview of what we are working on!

Please see our contribution guideline. Thank you!


MIT. See the LICENSE file for details.

  • [WIP] Introducing data-mapper and unit of work.

    [WIP] Introducing data-mapper and unit of work.

    Welcome to the real future of Propel2.

    This pull request is rather large and is going to introduce a heavy change in the way Propel 2 works internally and externally. We announced in several blog posts some years ago a more strictly decoupling of domain model logic and the actual persistent logic, so we support having POPO’s as model classes. The whole architecture is now based on no static methods anymore. The only static method used is to provide active-record facility.

    This implements now such a decoupling with the extraction of the logic, we had injected in the object classes directly before, into Repository and Persister class through small peaces called Components. Generated code that is related to a actual persisting method has been moved to the Builders at Platform classes which can modify all builded classes. The glue together is through the UnitOfWork class.

    With this decoupling I also decoupled SQL and Propel, so in the future it’s easier to support noSQL databases and even PHPCR.

    How this works

    Using POPO’s means using a instance of UnitOfWork which knows everything about living objects. It’s kinda the same as in doctrine, but more compatible to Hibernate’s way of doing it.

    You have a $configuration object which knows anything about the connection and known DatabasesMaps. It creates also the necessary unitOfWork (called Session) to be used in your user land code.

    We have now more builder classes:

    • ActiveRecordTraitBuilder This is new. It creates the trait for each model which can be used to activate active-record on a entity.
    • EntityMapBuilder Old TablMapBuilder. Creates the class with all mapping information and highly optimized methods used in persister and formatter classes.
    • ObjectBuilder The actual entity class builder, which is reduced to the absolut basics.
    • QueryBuilder No big change to old QueryBuilder except the splitting of those extremely big classes in several handy peaces (Components).
    • RepositoryBuilder This is new. It implements basically the repository pattern also known in Doctrine, which provides some basic methods to retrieve objects and handle objects. It also contains the methods which were before in the object model itself behavior methods.

    The ObjectBuilder generates the really basic entity class with injected trait of the ActiveRecordTraitBuilder if active-record is enabled. RepositoryBuilder generates a new base class <EntityName>Repository which should be mainly used in controllers instead of static stuff of query::create(), means we have now $repository->createQuery().

    What changed?


    Through the decoupling of SQL it’s necessary to remove all workflow based on RDBMS, which means:

    1. Renamed <table> to <entity>
    2. entity:name refers now to the PHP Class name instead of the SQL table name.
    3. Renamed <column> to <field>
    4. field:name refers now to the PHP property name instead of the SQL column name.
    5. Renamed <foreign-key> to <relation>
    6. foreign-key > reference is now optional. If not defined but is necessary (in case of RDBMS) it is automatically mapped to the Primary Key of the foreign entity.
    7. <relation> has now a field attribute instead of a phpName.


    platformClass moved to since we support now several different database vendors at the same time. It makes no sense to provide a —-platform option to build all models with the same platform, because it would generate the wrong code for entities using different platforms. (imagine a database for mysql and a database for mongodb).

    Entity class

    The actual entity class does not have any parent class anymore. At wish a active-record trait is injected or can be used to provide active-record methods like save(), delete() etc. This is completely optional. Lazy loading is achieved through a Proxy class, which will be returned in case the entity instance is created through database queries. The entity class contains basically only the properties and getter and setter methods.

    Implementation details are hidden now per default. Means if you have a relation from Car to Brand then Car doesn’t have a property brand_id nor its setter and getter method, but only brand.

    Code generation

    I’ve basically deleted all those extremely big builder classes and started from scratch, copying peace for peace if needed into separat component classes. I also created several traits which help you as component author with some handy methods which were in the AbstractBuilder classes before (which was too big as well).

    To achieve this I’ve also introduced a OOP way of generating PHP classes, methods, properties and so on. It looks like:

    ->addSimpleParameter('entity', $entityClassName)
    ->setDescription("Returns true if this is a new (not yet saved/committed) instance.")

    It generates PHPdoc blocks as well automatically. Double definition of methods are the past with this, although it’s possible to overwrite it acidentely through using incompatible behaviors that generate the same method. However, it’s now possible to detect easier if a method has been declared already or not.

    screen shot 2014-10-29 at 14 58 26

    Also the builder classes itself are now incredible slim:

    class EntityMapBuilder extends AbstractBuilder
         * @param string $injectNamespace
         * @return string
        public function getFullClassName($injectNamespace = '', $classPrefix = '')
            $injectNamespace = 'Map';
            if ($this->getGeneratorConfig() &&
                $customNameSpace = $this->getBuildProperty('generator.objectModel.namespaceMap')) {
                $injectNamespace = $customNameSpace;
            return parent::getFullClassName($injectNamespace) . 'EntityMap';
        public function buildClass()

    Unit of Work

    The unit of work pattern is living in Runtime\Session\Session class and provides us now finally the session-per-request pattern. Active-record is still session-per-operation since each save() call creates a new session and database transaction. Compared to doctrine it’s similar, except the fact that we highly utilize the unit of work pattern to gain extremely more performance. For example we use not a simple topological sort based on mapping information (like doctrine) but a grouped topological sort based on the actual living entity instances. This gives us the ability to fire bulk INSERTs and in general more optimized queries. Compared to doctrine we gained with our unit of work 5 times faster execution times (for 10k inserting rows with simple relation). See benchmark chapter. I’m using this library to sort anything by entity dependencies and grouping by equal type allowing us to have bulk insert/update.


    The repository pattern gives us the ability to hook during runtime into entity lifecycle events. We have events like pre/post save/update/insert/commit. In a behavior you can still inject code into those events by just returning actual php code in the old behavior hook method. However, it’s sometimes handy to hook during runtime in some events, which is now possible. The $configuration has those event dispatcher - you can hook into all events there as well, which aren’t bound then to any repository/entity.


    <database name=“mongo” platform=“mongodb”>
        <entity name=“MyBundle\Model\User”>
            <field name=“id” autoIncrement=“true” primaryKey=“true”/>
            <field name=“name” type=“varchar”
            <relation name=“group” target=“MyBundle\Model\Group” />
        <entity name=“MyBundle\Model\Group”>
            <field name=“id” autoIncrement=“true” primaryKey=“true”/>
            <field name=“name” type=“varchar”
    <database name=“default” platform=“mysql” namespace=“System/Model/”>
        <entity name=“Page”>
            <field name=“id” autoIncrement=“true” primaryKey=“true”/>
            <field name=“title” type=“varchar”/>
            <relation name=“content” target=“Content” />
        <entity name=“Content”>
            <field name=“id” autoIncrement=“true” primaryKey=“true”/>
            <field name=“name” type=“text” />
    // create the $configuration manually 
    $configuration = new Configuration(‘./path/to/propel.yml’);
    //or through `config:convert` command
    $configuration = include ‘generated-conf.php’;
    $session = $configuration->createSession(); //which is basically done by a framework on each request or controller call
    $car = new Car(‘Ford Mustang’);
    $session->persist($car); //same as in doctrine’s EntityManager::persist
    $session->commit(); //same as in doctrine’s EntityManager::flush
    $carRepository = $configuration->getRepository(‘\Car’); //provided usually per services/DI.
    $car = $carRepository->find(23);
    $brand = new Brand(‘Ford’);
    $car->save(); //cascade save as usual.
    $cars = $carRepository->createQuery()
    foreach ($cars as $car) {

    Why not just use Doctrine

    Because we have now a much more simple way of defining entities and we are incredible much more faster during code generation and fully utilizing the unit of work pattern. Also we have way less magic in our classes. Doctrine's UnitOfWork has 3.000 LOC, we only 100, although this will increase to few hundreds because of the missing circular references check.




    Static creation of query classes are still possible. It uses the same static global configuration object as active record instances. This means the test suite with all its static invokations will still be compatible.


    [x] Implement Fetch [ ] Implement lazy loading completely [x] Implement INSERT [x] Implement UPDATE (almost done) [x] Implement DELETE [ ] Implement circular references persisting fallback [ ] Convert more behavior to new architecture [ ] Implement Annotations support [ ] Make test suite green again [ ] More tests for repository and unitOfWork

    I'm working on it now since some weeks and it will take some weeks. I hope to get some stuff done during the symfony conf.

    opened by marcj 81
  • Added CUBRID Database 8.4.3+ support.

    Added CUBRID Database 8.4.3+ support.

    PR for #317: Add support for CUBRID Database.

    Tested on custom projects. Reverse and Forward engineered demodb demo database which is supplied by CUBRID by default. All successful.

    Could not run Propel2's own test suits because of the way these tests are created. Issues with Propel2 test suits are here (CUBRID doesn't provide anything like disabling the foreign keys. Propel2 creates table with no order, i.e. child tables before parent tables, which cause errors) and here (in CUBRID database names must be 17 characters or less. Propel2 uses 18+ characters). Until these issues with test suits are fixed, Propel2 tests can't be run on CUBRID Platform.

    Other than that, I have successfully used CUBRID with Propel2.

    opened by kadishmal 54
  • Benchmark with other version and libraries

    Benchmark with other version and libraries

    | Library | Insert | findPk | complex | hydrate | with | memory usage | time | | --: | --: | --: | --: | --: | --: | --: | --: | | PDO | 71 | 78 | 58 | 57 | 55 | 768,832 | 0.32 | | Propel16 | 181 | 121 | 85 | 151 | 166 | 9,699,328 | 0.71 | | Propel16WithCache | 117 | 67 | 76 | 129 | 130 | 9,699,328 | 0.53 | | Propel17 | 167 | 105 | 82 | 151 | 166 | 9,437,184 | 0.68 | | Propel17WithCache | 118 | 69 | 70 | 117 | 109 | 9,699,328 | 0.49 | | Propel20 | 183 | 116 | 83 | 180 | 179 | 12,320,768 | 0.75 | | Propel20WithCache | 129 | 78 | 81 | 153 | 143 | 10,747,904 | 0.59 | | Propel20FormatOnDemand | 128 | 76 | 77 | 146 | 144 | 6,029,312 | 0.58 | | Doctrine24 | 305 | 260 | 152 | 458 | 461 | 16,252,928 | 1.67 | | Doctrine24WithCache | 305 | 251 | 81 | 283 | 211 | 16,777,216 | 1.17 | | Doctrine24ArrayHydrate | 304 | 256 | 82 | 158 | 137 | 15,728,640 | 0.97 | | Doctrine24ScalarHydrate | 306 | 252 | 82 | 127 | 114 | 15,728,640 | 0.92 | | Doctrine24WithoutProxies | 304 | 252 | 83 | 214 | 307 | 15,990,784 | 1.20 |

    After merge PR #482

    | Library | Insert | findPk | complex | hydrate | with | memory usage | time | | --: | --: | --: | --: | --: | --: | --: | --: | | Propel20 | 184 | 118 | 88 | 179 | 180 | 5,767,168 | 0.75 | | Propel20WithCache | 126 | 76 | 79 | 150 | 144 | 5,767,168 | 0.58 | | Propel20FormatOnDemand | 129 | 76 | 78 | 146 | 145 | 5,767,168 | 0.58 |

    Legend In columns of "Insert", "findPk", "complex", "hydrate" and "with" represents the time in milliseconds. In column "memory_usage" stated real memory usage in bytes, including the necessary classes to library work. In column "time" indicates the time taken to perform all tests in seconds. The lower the value, the better, for all the columns.

    Please do not close this issue, I will be updated periodically.

    My repository for this tests

    opened by vlastv 50
  • Propel2 Coding Standards

    Propel2 Coding Standards

    Propel2 Coding Standards

    We use the Symfony2 convention, here is a short example (from

     * This file is part of the Propel package.
     * For the full copyright and license information, please view the LICENSE
     * file that was distributed with this source code.
     * @license    MIT License
    namespace Propel;
    use A\Baz;
    use B\Bar;
    class Foo
        const SOME_CONST = 42;
        private $foo;
         * @param string $dummy Some argument description
        public function __construct($dummy)
            $this->foo = $this->transform($dummy);
         * @param string $dummy Some argument description
         * @return string|null Transformed input
        private function transform($dummy)
            if (true === $dummy) {
            if ('string' === $dummy) {
                $dummy = substr($dummy, 0, 5);
            return $dummy;


    • Never use short tags (<?);
    • Don't end class files with the usual ?> closing tag;
    • Indentation is done by 4 spaces, don't use tabs;
    • Use the linefeed character (0x0A) to end lines;
    • Add a single space after each comma delimiter;
    • Don't put spaces after an opening parenthesis and before a closing one;
    • Add a single space around operators (==, &&, ...);
    • Add a single space before the opening parenthesis of a control keyword (if, else, for, while, ...);
    • Add a blank line before return statements, unless the return is alone inside a statement-group (like an if statement);
    • Don't add trailing spaces at the end of lines;
    • Use braces to indicate control structure body regardless of the number of statements it contains;
    • Put braces on their own line for classes, methods, and functions declaration;
    • Separate the conditional statements (if, else, ...) and the opening brace with a single space and no blank line;
    • Declare visibility explicitly for class, methods, and properties (usage of var is prohibited);
    • Use lowercase PHP native typed constants: false, true, and null. The same goes for array();
    • Use uppercase strings for constants with words separated with underscores;
    • Define one class per file;
    • Declare class properties before methods;
    • Declare class visibility after static or final keywords (e.g. final public, static public, final static, ...);
    • Organize use alphabetically and group them by Runtime, Generator, and others. Each group will be separated by a new blank line.

    Naming Conventions

    • Use camelCase, not underscores, for variable, function and method names;
    • Use namespaces for all classes;
    • Use Propel as the first namespace level;
    • Suffix interfaces with Interface;
    • Use alphanumeric characters and underscores for file names;
    • Don't forget to look at the more verbose Conventions document for more subjective naming considerations.


    • Add PHPDoc blocks for all classes, methods, and functions;
    • Omit the @return tag if the method does not return anything;
    • The @package and @subpackage annotations are no more used.


    The following license has to be included in all files:

     * This file is part of the Propel package.
     * For the full copyright and license information, please view the LICENSE
     * file that was distributed with this source code.
     * @license    MIT License
    opened by willdurand 50
  • [WIP] Configuration system refactor

    [WIP] Configuration system refactor

    See issue #285.

    Basic ideas

    • Reorganize the configuration properties in a more rational hierarchy
    • Support for multiple formats
    • Validate configuration

    Implementation details

    Some of the following points should be discussed.

    • Based on Symfony Config Component
    • Support for .php, .ini, .json, .yaml, .xml formats.
      • Ini file loader accepts both .ini and .properties files.
      • Inside ini file, we can define a hierarchy in standard way (with sections and array definitions) or in a "nested" way, inspired by Zend Framenwork Config.
    • Ability to define some parameters, in any configuration format, delimited by % (see Symfony\Component\DependencyInjection\ParameterBag class). Example:
    # yaml
        adapter: mysql
        host: localhost
        dsn: %adapter%:host=%host%


    // php
        'database' => array(
            'adapter' => 'mysql',
            'host' => 'localhost',
            'dsn' => 'mysql:host=localhost'
    • I've put all new classes in Propel\Common\Config namespace. I've choosen Propel\Common because, theoretically, configuration system can be used both at generation and runtime, even if, for the most part, is used at generation time.
    • I supposed to define a single configuration file, named ~~propel-config.ini~~ propel.ini (or .yaml or some other supported format) which should be located in project root directory or in a sub-directory named "conf" or "config" (we can choose something else). This file also replace runtime.conf and buildtime.conf.
    • ~~Default configuration, shipped with Propel, is placed in tools/Generator/default-config.yaml file (may be it could be better tools/Config/default-config.yaml). Default properties can be override by project configuration, which can be override by options passed to command line.~~ Moved to step 2


    • [x] Step 1: add new classes and relative tests
    • [x] Step 2: ~~move all default options from command classes to default-conf.yaml and~~ implement Propel\Common\Config\PropelConfiguration class to validate configuration and load defaults, via TreeBuilder. Remove all not more used options and define a better property structure.
    • [x] Step 3: refactor all those classes using configuration.
    • [x] Step 4: update documentation

    Each step can be merged separately.

    opened by cristianoc72 49
  • Removing PEER classes

    Removing PEER classes

    The work in progress is available here:

    Constants moved to their new place. I'm fixing tests right now (the most part is green). When it will be done, each method will be moved one by one. Any help is welcome.

    Release Blocker 
    opened by willdurand 49
  • [RFC] Renaming 'Om' to 'Base'

    [RFC] Renaming 'Om' to 'Base'

    The generated Model classes are currently stored in files under the 'Om' namespace (and subdirectory). 'om' used to mean 'Object Model' (although I'm not really sure), but the stub files are also part of the Object Model, so ot doesn't really make sense.

    I suggest to rename the 'Om' folder to 'Base', and rename the generated classes from 'BaseBook' to 'Base\Book', which would make more sense.

    RFC Generator 
    opened by fzaninotto 40
  • `deleted` column conflicts with propels own `deleted` attribute

    `deleted` column conflicts with propels own `deleted` attribute

    Let's say we have a table user with the following column: <column name="deleted" type="CHAR" sqlType="enum(....)"/>

    The generated object model will now look like this:

         * The value for the deleted field.
         * @var        string
        protected $deleted;

    But propel already generated a property with the same name for internal use:

         * attribute to determine whether this object has been deleted.
         * @var boolean
        protected $deleted = false;

    Which results in Fatal error: Cannot redeclare User::$deleted in /Base/User.php on line xxx

    Propel should warn us about this conflict; or even better should not name internal properties with general names (maybe add a prefix?).

    opened by mpscholten 39
  • use IteratorAggregate for Collections, so nested iterations are possible

    use IteratorAggregate for Collections, so nested iterations are possible

    At the moment nested iteration over the same collection is not possible because the Collection is the Iterator itself and so there is only one array pointer for current position. I suggest to use the IteratorAggregate interface instead.

    I came up to this by using a preSave hook where I iterate over a collection. But at call time Propel was iterating over the same collection in the doSave method of a relational object. So my foreach-loop was modifying the internal pointer of the Collection and some objects were not saved.

    opened by gharlan 39
  • Remove validation part from Propel core and add Validate behavior

    Remove validation part from Propel core and add Validate behavior

    According to #94 issue, we remove the validation part from the Propel core and, at the same time, we add a behavior, to perform validations as easily as in the previous way.

    To remove the validation part from the core, we merged @willdurand's remove-validate branch into master (with a couple of fixes in 3 fixtures schemas).

    The Validate behavior is based on Symfony Validation Component and exposes about the same api of previous validation system: a ´validate()´ method to perfom validations and a ´getValidationFailures()´ to retrieve validation errors (we're old Propel1 users and we always use the good old validation system).

    This behavior is totally configurable in ´schema.xml´. Unfortunately, we was unable to mantain the old xml syntax, but the new beahvior configuration is very easy and readable.

    Release Blocker 
    opened by cristianoc72 34
  • Removed PEER, Fixed #183, and more.

    Removed PEER, Fixed #183, and more.

    $ grep 'peer' * -rin | wc -l
    • Removed all peer stuff. …
    • Adjusted documentation, .xml etc.
    • Abstracted connection handling, so we don't deal with PDOStatement directly anymore, but with DataFetcher, which hides the adapter specific stuff. (PDOStatement etc.)
    • Abstracted OM build process, so the platform can overwrite which OM Build class we use. (getBuilderClass())
    • Made populateObjects name-indexed compatible.

    Fixed #183

    opened by marcj 33
  • Mysql foreign key diff generation ANSI_QUOTES

    Mysql foreign key diff generation ANSI_QUOTES

    Hey I found a bug in MysqlSchemaParser->addForeignKeys (possibly in other locations) I was spinning up a test database and It did not want to generate diffs for me anymore on that database because SQL_MODE=ANSI_QUOTES; was set by default.

    I just turned off this feature but maybe handy if some fix is made in the future? simplest (hacky) fix would be to force that connection to not have it. But the maybe more structural option is stripping double quotes?

    opened by spidfire 0
  • New Beta release

    New Beta release

    We should plan a new beta release for the upcoming weeks. The UUID feature is a great topic for it.

    Maybe we can further include also some cleanup?

    I think we should also:

    • [ ] Check open issues for what should be included, especially regression fixes and bugfixes
    • [ ] Finish open PRs as good as we can to include
    • [ ] Remove some of those silencing and general improvement of CS where possible
    • [ ]
    • [ ] PHP 8.2+ support / CI check
    opened by dereuromark 0
  • Using addJoin causes where clauses to fail

    Using addJoin causes where clauses to fail

    When using addJoin to join a table on column with no foreign key, where clauses are unable to extract the join table name appropriately resulting in the following error:

    PHP Fatal error: Uncaught Propel\Runtime\Exception\PropelException: Cannot determine the column to bind to the parameter in clause "Author.First LIKE ?".

    Example code is:

    $query = BookQuery::create(); $query->addJoin(BookTableMap::COL_AUTHOR_ID, AuthorTableMap::COL_ID, Criteria::INNER_JOIN); $query->where("Author.First LIKE ?", '%Charles%');

    It seems that this error comes up because ModelCriteria::getColumnFromName is unable to find the join object because the join is not set up with a key. I am able to get around it by setting up the join object explicitly as a ModelJoin but it should be able to work using the simple addJoin.


    $join = new ModelJoin(); $join->setJoinType(Criteria::INNER_JOIN); $join->setTableMap(AuthorTableMap::getTableMap()); $join->setLeftTableName('Book'); $join->setRightTableName('Author'); $join->addCondition(BookTableMap::COL_AUTHOR_ID, AuthorTableMap::COL_ID);

    $query = BookQuery::create(); $query->addJoinObject($join, 'Author'); $query->where("Author.First LIKE ?", "%Charles%");

    I would suggest either setting the join key in the addJoin method with the value of the right table name or alias and/or adding a block to the ModelCriteria::getColumnFromName which correctly selects the join from the array of joins (similar to how getModelJoinByTableName but not limiting it to ModelJoin and selecting the join based on Alias).

    opened by KelseySheely 7
  • UUID type support

    UUID type support

    Based on

    The main idea would be to add UUID as natively supported with fallback to binary(16) or alike where needed. So all you need to do is to specify uuid as native type and it should use the correct/best way as per DB type.

    Does that make sense? Would this be the way forward instead of defining it more manually? The more manual way would probably have to be to support char(36), binary(16) and alike as low level definitions.

    If we go with uuid and native support as per DB type:

    • Postgres supports it as native type (129bit) directly since v8 afaik
    • Mysql can use binary(16) under the hood, just as other ORMs do - e.g. here
    • ?

    And feedback/ideas welcome.

    opened by dereuromark 8
  • Autoincrement not set with

    Autoincrement not set with "GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY " in postgres.

    Reversing a schema that uses IDENTITY to create an auto incrementing primary key in Postgres appears to not flag the column as autoIncrement="true". So if I create a record, save() it, and try to reload() it throws an error, and if I try to getId() instead of reloading the id Is null.

    If I edit the schema.xml and tell it that the column is autoIncrement, then propel uses SELECT nextval('schema.sequence_name') to fetch the id, but this throws a permission error because IDENTITY does not create permissions on the sequence for the user by default because it is not necessary. When fetching the ID by hand in postgres, I simply put RETURNING id at the end of my INSERT statement and this doesn't require any permissions like nextval() would.

    Propel could improve its compatibility by supporting GENERATED BY DEFAULT AS IDENTITY (INCREMENT .... ) in Postgres and then fetching primary keys using RETURNING instead of nextval(sequence_name)

    opened by adjenks 0
  • generated-classes are invalid when table columns contain spaces

    generated-classes are invalid when table columns contain spaces

    I generated a schema from my existing db and then built the model. In a file ending with "TableMap.php" there was a const defined like so:

         * the column name for the Street Name field
        const COL_STREET NAME = 'myschema.mylocationtable.Street Name';

    The gap between "COL_STREET" and "NAME" is invalid.

    This column with a space was defined in many places in the file. Replacing "COL_STREET NAME" with "COL_STREET_NAME" in the file seemed to resolve it.

    opened by adjenks 1
  • 2.0.0-beta2(Jun 29, 2022)


    With this release, we continue Beta-version releasing toward API stabilization.

    The main changes include:

    • PHP 8.1 and 8.2 compatibility
    • Added strict types to generated code
    • Added Symfony 6 support
    • Dropped Symfony 3 support. The minimum required Symfony version is 4.4.0 now.
    • Added Monolog 2 support
    • Added a type safe access to the StandardServiceContainer via Propel::getStandardServiceContainer() method
    • Added support for the DATETIME column type
    • Moved templates into own root level
    • Overall code quality improvements
    • Fixed DatabaseComparator in order to skip migration creation if table has skipSql flag
    • Fixed an issue with many-to-many mapping
    • Fixed usage of deprecated date format
    • Fixed column's time format issue
    • Fixed issue with identifier quoting being ignored
    • Fixed a debug mode behavior in order to use new connection with it

    Many thanks to all the contributors! @nederdirk @ikeyan @craigfrancis @jbarton123 @cristianoc72 @gharlan @javray @dereuromark @mringler @felixgeyer @oojacoboo @herasimenko1987 @fbourigault @manstie @asaulenko @dmytro-dymarchuk @yaroslav-spryker @DarkAxi0m @sacerro @geega @gechetspr

    BC breaking impact

    Please note that all methods have param and return types being added now where they were feasible and ensure better code quality. Make sure any extensions are updated here regarding their method signature. TIMESTAMP column type in schema files for the MySql databases now generates column with actual TIMESTAMP type instead of DATETIME as it was previously. Propel diff considers it as a table structure change and generates migration. As another side effect timestamps are only valid until 2037 (32bit). Make sure to adjust any databuilders or fixtures accordingly.

    Source code(tar.gz)
    Source code(zip)
  • 2.0.0-beta1(Sep 6, 2021)


    With this release, we start Beta-version releasing toward API stabilization.

    The main changes include:

    • PHP 8.1 compatibility
    • Fixes for PHP 7.4 preloading
    • Fixed usage of default on-update and on-delete behavior
    • Show names of uncommitted migrations
    • BehaviorLocator now looks in dev packages, as well
    • Aggregate multiple columns behavior & parameter list support
    • Fixes around aliases and cross joins and subqueries
    • Added support for keytype in the magic import/export methods
    • PSR naming fixes for variables and methods
    • Reset partial flag when populating a relation
    • Added exists operator
    • Escape quotes in behavior
    • Quote primary table name if identifier quoting is enabled
    • Formats insert DATE values as Y-m-d instead of Y-m-d H:i:s.u
    • Allow default-value for concrete-inheritance to be instantiable
    • Pluralize Box to Boxes
    • Allow NO ACTION for foreign key references (in the dtd/xsd)
    • Use object-equality instead of reference-equality to compare object properties
    • Generates data dictionary documentation
    • PHPStan related code cleanup

    Many thanks to all the contributors!

    BC breaking impact

    Please note that methods have param and return types being added now where they were feasible and ensure better code quality. Make sure any extensions are updated here regarding their method signature. Some internal methods were also renamed to fit PSR coding standards.

    Due to the support of PHP 7.4 preloading, an update will need the configuration to be rebuilt once by calling config:convert, see

    Source code(tar.gz)
    Source code(zip)
  • 2.0.0-alpha12(Jan 22, 2021)


    The main changes include:

    • PHP 8 compatibility
    • Widening the range of Symfony v4 to 4.0+ (instead of 4.3+)
    • Fixed transaction handling when \Throwable is thrown
    • Fixed identifierQuoting for Versionable behavior
    • Fixed invalid hydration when using mergeWith of criteria with "with" models
    • Adds the ability for locking reads, either shared or exclusive
    • Updated TableMap generator to add column name map for normalization and performance speedup
    • Use temporal formatter in the toArray() generator, fixes the issue of entities wrongly being marked as dirty due to differences in the datetime formatting

    Many thanks to contributors! @mruoss, @prgTW, @FranciszekKrasowski, @bezpiatovs, @chuongnh3atgmaildotcom, @kasparsj, @nederdirk, @cristianoc72, @stereomon, @dereuromark .

    BC breaking impact

    Please note that due to PHP7 + PHP8 versions both able to be supported with this library, the PDO access had to be refactored in a not fully BC way. Instead of directly extending the PHP core classes, we now depend on interface contracts.

    If your software has directly extended those in the past, please make sure to adjust your extensions accordingly.

    • PDOStatement => Propel\Runtime\Connection\StatementInterface
    • PdoConnection extends PDO implements ConnectionInterface => only implements the latter and proxies to PDO instead.
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0-alpha11(Aug 7, 2020)

    With this release, we continue Alpha-version cleanups aiming API stabilization. Many thanks to our contributors, who made possible this release to come that fast. 👍

    The main changes include:

    • Fixed return value for "no migration needed" case in MigrationMigrateCommand
    • Always create unique indices by constraint for Postgres (@daniel-rose)
    • Do not try to fetch related objects of a new object (@gharlan)
    • Map JSON type to native Postgres type (@tienbuide)
    • Fixed nullable docblock for mutator methods (@dereuromark)
    • PHP 7.2+ cleanups (class visibility modifiers, native types etc)
    • Dropped EOL Symfony 2, Postgres 9.4 from test matrix
    • Fixed docblocks and typehinting
    • PHPStan level 5 static analyzing
    • Yoda notation cleanup
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0-alpha10(Jul 13, 2020)

    With this release, we continue Alpha-version cleanups aiming API stabilization. It's a good target for project updates, as it has the widest dependency list (including EOL components). In the following releases, we expect to reduce the support of EOL components.

    Many thanks to our contributors, who made possible this release to come that fast. 👍

    • Full support with Symfony components 2.7+, 3.3+, 4.0+, 5.0+ ( @Incognito )
    • Adds support for MYSQL_ATTR_SSL_VERIFY_SERVER_CERT configuration option ( @marcusirgens )
    • Fixed an issue where propel reverse breaks with system-versioned tables ( @zwhedbee )
    • Applies PHPStan Level 1 Fixes, which corrects many warnings, type checks, missing types, and incorrect annotations. ( @dereuromark )

    Some interesting commits in this release:

    2da7387 Fix issue where propel reverse breaks with system-versioned tables (#1549)
    4093a26 Allow option MYSQL_ATTR_SSL_VERIFY_SERVER_CERT to be set
    584c40b Add PHPStan level 1 check with baseline until we can remove symf2.
    c8a40ff Sf validator v5 (#1603)
    78862a2 Start enforcing PHPStan level 1.
    9ea8516 Make execute() compatible to Symf5 int only.
    f3d47fd fix(PDO): Can't prepare query with BINARY_ALL criteria when ATTR_EMULATE_PREPARES is false
    0027b1c sf validator in v3.0, v3.1 and v3.2 all have regex issues
    db208d7 The symfony 4.2 Unique validator is not a suitable replacement for Propel's
    5e4361f Special composer for php8 testing
    09f6f3a Mysql test were incorrectly setup
    7a71f8c Prevent infinite loops when database is not connecting
    3328fe1 Symfony 5 enforces return types on execute method
    8734275 Now with updated console to Sf v5
    5b3db85 Requires phpunit fix for reflection on php7.4. 7.5.15 Also runs on php7.1
    9bc9162 sf 2.5 is about 5 years past EOL, dropping it reduces unpredictable codepaths and feature sniffing
    9cde76f Properly register the translation dependency needed by the validation behaviour for sf >= 2.5
    cec2867 FIX bug CLOB_EMU oracle
    33503a6 Make travis run postgresql 12 (#1580)
    171743a Fix SQLite sprintf() error (#1587)
    5221ebc Works on Trusty but not Xenial or Bionic. Because 10.1 is only a few months form EOL, using Trust is acceptable for this. 10.1 tests should be removed in the coming months anyway.
    40466af Enable MariaDB builds
    c1b4361 Use PSR-4 autoloader
    439b2b6 Raise code quality to PhpStan on lowest level 1
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0-alpha9(Jun 25, 2020)

    With this small release, we start a series of upgrades and stabilization activities of Propel2, which aim to end with the following stable 2.0 release. New dependencies will allow us to get more feedback on compatibility issues and addressing them during the stabilization phase.


    • Added compatibility PHP 7.4
    • Added support of PSQL expressions [CURRENT_TIMESTAMP, LOCALTIMESTAMP]
    • Allowed Symfony 5 dependency
    • Removed PHP 5.x compatibility (with EOL 01.2019)


    • Updated PHPUnit from 4.0/5.0 to 7.0
    fce5f55 Keep tests for deprecated class.
    d44d035 Use term primary/replica instead, deprecate in BC way.
    4c45713 Small fixes for PHP 7.4
    c2dbbbc Only generate calls to parent hooks, if the class being generated has a base class
    3f4b70c Use stable php74
    f6d20df Add Symfony 5 dependency compatibility
    603d42c Rearrange implode() arguments where necessary to conform to php7.4
    decc437 Dropping dead PHP EOL 5.5
    d84c8e3 Update to PHP74 Travis and simplify matrix.
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0-alpha8(Feb 19, 2018)

    This release contains several important fixes (including important security fix):

    • SQL injection in limit() Criteria API. If you use this method from external input, update immediately your code base to cast the argument to int first or use 2.0.0-alpha8). What happened? The method \Propel\Runtime\ActiveQuery\Criteria::setLimit did not cast the $limit automatically to an int, allowing to place any arbitrary SQL into this argument. You can fix the security vulnerability by casting manually you limit to int or update to newest Propel2 version.
    public function pageAction(Request $request){
        $posts = BlogPostQuery::create()
            ->limit($request->get('limit')); //<-- vulnerability
        return $posts;

    Update your call to following to fix it:

            ->limit((int) $request->get('limit'));
    • PHP php7.1+ compatibility
    • Symfony 4 compatibility
    4c309e3e - SQL injection fix: Cast limit to integer when setting via Criteria::setLimit() (#1465) <Mike Petrovich>
    cd23d738 - Coerce offset and limit values to integers for MySQL LIMIT clause (#1464) <Mike Petrovich>
    c64c0d61 - Format parameter can be null (#1462) <Timo Schwarzer>
    3dde1043 -  #1447. On preInsert object in TimestampableBehavior we get different dataTime. (#1457) <Eugene Kurasov>
    80cda8a3 - Fix getPrimaryKeyFromRow for custom php types (#1397) <jaspervdm>
    df9fefdc - Address failed tests after applying fix for issue #1425 (#1449) <Gomes>
    1f6557d1 - Fix test suite and init command (#1452) <Cristiano Cinotti>
    dbd225c5 - Make offsetGet compatible with the parent's offsetGet method (#1446) <Timo Schwarzer>
    a2ebdfcc - Added referenceOnly attribute to external-schema (#1439) <Jonas Rudolph>
    daba2c85 - address countable issue in php7.2 (#1425) <Chris Schuld>
    98d584f8 - Added php 7.2 in travis (#1415) <Maxim>
    79bffd5a - improved formatting speed (#1428) <Tomasz Wójcik>
    3053018a - Symfony 4 compatibility (#1434) <Cristiano Cinotti>
    315fd092 - Fix vendorInfo handling for foreign keys and add support for postgres deferrable FK constraints (#1418) <Nicolas FRANÇOIS>
    a732a9db - Throw original exception in criteria file (#1422) <Maxim>
    d24a474f - Fix issue #1406 : diff issue with CURRENT_TIMESTAMP on maria 10.2 (#1407) <wollanup>
    9c3458a1 - Remove tailing hashes (#1401) <wdhwg001>
    cd5d36d9 - Fix Gitter (#1402) <wdhwg001>
    7b1e8325 - PHP Warning in Profiler (#1400) <Maxim>
    e404ed8d - fix ObjectBuilder addFKAccessor reference to int (#1399) <ktret>
    b589458e - spell DECIMAL correctly in isNumber function (#1398) <ktret>
    c3e7a5c4 - Fix json equality check for json columns (#1396) <kriks57>
    b4c13d64 - Fix MssqlAdapter::applyLimit from generating malformed queries when `from` is included as a non-keyword (#1395) <Chase>
    6c3d6364 - Fix detection of subquery virtual columns in MssqlAdapter::applyLimit (#1382) <Chase>
    efafd096 - Fix wrong string generation in PropelDateTime::getMicrotime <Marc J. Schmidt>
    97314087 - Update Database.php (#1379) <Gula Andrij>
    a00829fa - Fixed versionable behavior with incorrect constant (#1270) <gabor-kormany>
    1b5ffef9 - Fix greedy regex incorrectly splitting query string with multiple FROM statements [Mssql] (#1375) <Chase>
    6aa779ef - Check incomplete foreign-keys #675 (#1259) <atompulse>
    1ab67865 - Fix broken boolean types on IniFileLoader (propelorm/Propel2#1355) (#1356) <Gregory Boddin>
    9e4039d0 - Undefined method being called; issue #1352 (#1354) <AlexanderBliznuk>
    fe18de34 - json type column for mysql 5.7 (#1372) <cedric lombardot>
    02f085de - Allowing file loader to accept empty env vars (e.g. DB_PW) (#1373) <Avi Bueno>
    5512c399 - Allows the use of Unsigned="true|false" as a MySQL vendor column parameter. (#1360) <Damien VERON>
    b311676a - Support XML Inclusions in configuration, adds #1321 (#1322) <hakre>
    618c1922 - Result of method Model::init*() (void) is used. (#1365) <Maxim>
    4395623d - Fixed Om\Object::toArray when using DateTimeImmutable (#1359) <ricardoe>
    e78bb96e - Fix remove spaces in empty line on windows (#1357) <Andrey>
    ff113cdb - Test also php 7.1 (#1337) <Massimiliano Arione>
    65c6515b - fix TableMapTrait.php (#1339) <CrayD>
    bdca6fc2 - Validator fix (#1350) <Angel Koilov (po_taka)>
    67bad146 - Revert "Update composer.json" (#1349) <Marc J. Schmidt>
    0b31885e - Update composer.json (#1348) <Gula Andrij>
    83a8bb97 - don't allow symfony/validator < 2.3 (#1342) <Gregor Harlan>
    2a635ffd - Update PgsqlPlatform.php (#1338) <Oliwier Ptak>
    b7c8ac90 - symfony/validator >= 3.2.2 is not supported anymore. <Marc J. Schmidt>
    d81612c3 - fixed php7.1 implicit string to array cast <Marc J. Schmidt>
    413aa52a - Changes description of filterBy function (#1334) <Maxim>
    367878d0 - Fix regression in ObjectCollection of Collections. (#1330) <Peter Potrowl>
    5026b534 - Fix php7.1 [] operator not supported for strings in (#1329) <cedric lombardot
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0-alpha7(Jan 3, 2017)

    dc55788 - Fixes #1324 - fixed wrong sprintf arguments positioning in getIdentifierPhp() 21c75aa - Check 'alreadyInSave' before save transaction (#1309) 3fe9d62 - fix generated code formatting (#1304) ea869c7 - array columns getter: return correct value for [0] (#1302) b1f8262 - persistent connections working again, Removed StatementInterface and PdoStatement (#1295) 38f1044 - removing leading space within the sqlite dsn (#1292) 398c343 - Use DATETIME2 to allow high precision timestamps (#1293)

    Source code(tar.gz)
    Source code(zip)
  • 2.0.0-alpha6(Oct 23, 2016)

    58d57ad - Compatibility of numeric and string keys (#1279) <Marc J. Schmidt>
    4641d27 - Update to use TIME & DATE types (#1250) <Marc J. Schmidt>
    f42493f - Support in joinWith also relation name as first argument when name is not sufficient <Marc J. Schmidt>
    670fcbd - Fixed argument parsing of __call for joinWith <Marc J. Schmidt>
    97dcdae - Allows the use of TimestampableBehavior with INTEGER columns (#1261) <Marc J. Schmidt>
    f1f5fd3 - Updated PHPDoc for filterByX (#1263) <Marc J. Schmidt>
    bb880ee - Allow option MYSQL_ATTR_MAX_BUFFER_SIZE to be set (#1267) <Marc J. Schmidt>
    5d02057 - Fix for the issue with cloned criterias affecting each other when using combine (#1275) <Marc J. Schmidt>
    2a48c79 - Typos (#1274) <Marc J. Schmidt>
    061816e - Phpunit boot scripts accepts command line arguments (#1276) <Marc J. Schmidt>
    884856f - Ensuring that PropelDateTime::getMicrotime() includes the fractional part to match the expected 'U.u' format in createHighPrecision(). (#1257) (#1258) <Marc J. Schmidt>
    83906ee - Fix schemaname for search_path (#1245) <Marc J. Schmidt>
    d7a74d3 - Added test for timezone in PropelDateTime::createHighPrecision (#1255) <Marc J. Schmidt>
    2cec389 - specify timezone in PropelDateTime::createHighPrecision (#1243) <Marc J. Schmidt>
    8a25ecd - Locale-independent functionality of PropelDateTime::createHighPrecision (#1242) <Marc J. Schmidt>
    1b904ab - Fix versionable behavior when exists 1:1 relationships (#1223) <Marc J. Schmidt>
    e725b85 - Run sql:build model:build config:convert post-init (#1236) <Marc J. Schmidt>
    866d368 - Set $criteria->insert to $criteria->doInsert (#1239) <Marc J. Schmidt>
    f1f4b63 - Allow high precision timestamp using sqlType of DATETIME(6)/TIMESTAMP(6) <Marc J. Schmidt>
    53ff084 - Unique validator fix. (#1237) <Marc J. Schmidt>
    74079bd - [generator] Making recursive configurable trough configuration files (#1230) <Marc J. Schmidt>
    d0d24d5 - Merge branch 'master' of <Marc J. Schmidt>
    b9a3bee - Added DateTime support for milliseconds. <Marc J. Schmidt>
    6950daf - Added some missing types for PGSQL (#1220) <Marc J. Schmidt>
    fb4e5fa - Fixed versionable behavior (#1222) <Marc J. Schmidt>
    4ab6150 - PDODataFetcher can have null data object and rewinded (dump by example) / tests avoid exception (#1204) <Marc J. Schmidt>
    7515fbc - Added possibility to decorate generated migration files with a custom suffix (#1214) <Marc J. Schmidt>
    31ab9b3 - Pass specific driver options to PDO constructor (#1190) <Marc J. Schmidt>
    c7b9a63 - Inconsistent behavior between join and joinWith leading to malformed on clause (#1217) <Marc J. Schmidt>
    43d3759 - Removed/Fixed tests for auto-use of LIKE for * <Marc J. Schmidt>
    43c65df - Added proper Exception when encountering a table without PK. (#1215) <Marc J. Schmidt>
    dd65d54 - Merge branch 'master' of <Marc J. Schmidt>
    5d5825b - Removed auto-usage of LIKE comparison when '*' or '%' is found in the value. <Marc J. Schmidt>
    7538037 - fix, value part of reference should be optional (#1208) <Marc J. Schmidt>
    30506eb - polymorphic foreign keys allowed by DTD/XSD (#1207) <Marc J. Schmidt>
    12cc008 - Add ability to use specified namespace in propel init command (#1202) <Marc J. Schmidt>
    32a4243 - Fix an issue with an outdated method being called (#1194) <Marc J. Schmidt>
    8536fe6 - Fix identation of PHPDoc on open class (#1197) <Marc J. Schmidt>
    9e4eb90 - add "set" type when parsing MySQL columns (#1188) <Marc J. Schmidt>
    8e12811 - Add typehint for "MigrationManager" parameter (#1186) <Marc J. Schmidt>
    b89b3e7 - force input size type to int when using `replaceSize` (#1178) <Marc J. Schmidt>
    df92777 - Adding required properties to `PropelConfiguration` for MySQL certificate handling. (#1176) <Marc J. Schmidt>
    ec19b26 - fix tablePrefix with archivable behavior (#1173) <Marc J. Schmidt>
    0a13eaa - Fixing `PropelConfiguration` for syslog'ing. (#1175) <Marc J. Schmidt>
    b511db0 - fix tablePrefix with versionable behavior #824 <Marc J. Schmidt>
    4911238 - Allow usage of milliseconds/microseconds in TIMESTAMP and TIME columns using sqlType="DATETIME(6)" <Marc J. Schmidt>
    c0a0d21 - Merge pull request #1165 from cristianoc72/master <Marc J. Schmidt>
    ce7fc16 - Revert "Make MySQL table modifications always use one statement to fix total table-corruption bug #1115" (#1161) <Marc J. Schmidt>
    5b6b0af - change bootstrap.php locale to en_US.utf-8 for iconv / block root user launch tests suite (#1153) <Marc J. Schmidt>
    f50d331 - Urldecode values when parsing a DSN (#1156) <Marc J. Schmidt>
    cc28a10 - Speedup travis builds (#1157) <Marc J. Schmidt>
    8dacff7 - Removed mariadb 10.1 from travis as their setup is broken <Marc J. Schmidt>
    7b1016f - we should be able to configure PDO connect timeout (#1159) <Marc J. Schmidt>
    21a7cec - Made ObjectCollection compatible with non propel models. <Marc J. Schmidt>
    c3fe547 - Fix issue #1162 <Cristiano Cinotti>
    14377a8 - Fix model_paths unit tests <Marc J. Schmidt>
    4782ebd - Merge pull request #1125 from thomaschaaf/patch-1 <Marc J. Schmidt>
    f8f9e51 - Merge pull request #1151 from marcj/master <Marc J. Schmidt>
    d14d7ad - Merge pull request #1110 from jeremydenoun/propel-remove-quote-map <Marc J. Schmidt>
    801cc31 - Merge pull request #1032 from jeremydenoun/propel-parenthook <Marc J. Schmidt>
    53e8e39 - Merge pull request #1148 from gharlan/fix-findpk <Marc J. Schmidt>
    3d57418 - Merge pull request #1147 from dimitriyremerov/skip-reserved-methods <Marc J. Schmidt>
    0272f59 - Merge pull request #1149 from gharlan/fix-schematest <Marc J. Schmidt>
    2777a6d - Allow '...' as package attribute <Marc J. Schmidt>
    84487ed - fixed SchemaTest <Gregor Harlan>
    7cdff72 - findPk should not use instance pool for non empty queries <Gregor Harlan>
    279c24f - skip-reserved-methods: Added a warning TODO <Dimitriy Remerov>
    ba861da - skip-reserved-methods: Refactored detection of the name for skipping <Dimitriy Remerov>
    5347ac3 - skip-reserved-methods: Prevented function redeclaration error by skipping reserved methods <Dimitriy Remerov>
    790ce55 - Merge pull request #1146 from dimitriyremerov/slaves-config <Marc J. Schmidt>
    58b3ea7 - slaves-config: Added user and password options to the slaves configuration <Dimitriy Remerov>
    393a0fe - Proposal for support baseClass default implementation for callback (save/update/delete) <Jeremy Denoun>
    f0e91f8 - proposal for remove quote in column normalization <Jeremy Denoun>
    a572cda - Merge pull request #1140 from mpscholten/password-propel-config <Marc J. Schmidt>
    1867b8f - Merge pull request #1138 from TrogloGeek/master <Marc J. Schmidt>
    26abf02 - Fixed password not set in json config by `propel init` <Marc Scholten>
    ca452d6 - Fixed password not set in php config by `propel init` <Marc Scholten>
    5e88e63 - Merge pull request #1120 from daniel-zahariev/patch-1 <Marc J. Schmidt>
    16c188e - BaseModel::save(): call $this->preSave() before fetching $this->isNew() <Damien VERON>
    ce6558a - Merge pull request #1009 from pawel-oronowicz/master <Marc J. Schmidt>
    1b028f4 - Merge pull request #1081 from nibsirahsieu/query_cache_paginate <Marc J. Schmidt>
    3732ff7 - Typo <Marc J. Schmidt>
    cfc28f8 - Merge pull request #1130 from Big-Shark/datatimeinterface <Marc J. Schmidt>
    d74c664 - Merge pull request #1131 from gulaandrij/patch-2 <Marc J. Schmidt>
    3423a87 - Merge pull request #1136 from almost-online/patch-1 <Marc J. Schmidt>
    c0d2a63 - Merge pull request #1090 from nibsirahsieu/fix_quoting_test <Marc J. Schmidt>
    ae20f91 - Update MigrationDiffCommand.php <Sergiy Andrusenko>
    feef0fe - Merge pull request #1133 from kolah/issue-1133 <Marc J. Schmidt>
    e5f4851 - Fix <kolah>
    c442fa8 - Test <kolah>
    2f33ff4 - Update Collection.php <gulaandrij>
    a2c2ab1 - Added PhpType for dates <Big_Shark>
    60be3b3 - Change DateTime for DateTimeInterface <Big_Shark>
    af6d5b6 - Merge pull request #1070 from staabm/xdebugcli <Marc J. Schmidt>
    6769634 - Merge pull request #1020 from jeremydenoun/propel-parentqueryclass <Marc J. Schmidt>
    8ba1dff - Merge pull request #1079 from nibsirahsieu/groupByArray <Marc J. Schmidt>
    28281c4 - Merge pull request #1111 from IceShack/feature/newColumnTypeSet <Marc J. Schmidt>
    c2b81fa - Merge pull request #1126 from gharlan/consider-addClassLevelComment-config <Marc J. Schmidt>
    5aff0ae - Merge pull request #1119 from bcbrr/fix/model-build-input <Marc J. Schmidt>
    eb4e5d3 - consider addClassLevelComment config in all extension classes <Gregor Harlan>
    7ef1ebd - Readadd model_path to propel bundle. <Thomas Schaaf>
    286ac33 - Fixed errors from PR <Moritz Schroeder>
    40fc97d - Fix $getter mixup in sluggable behaviour generator <Daniel Zahariev>
    f09753b - Fix --object-class option not being considered when building model <Baptiste Cabarrou>
    4157132 - Merge pull request #1116 from ExplodingCabbage/master <Marc J. Schmidt>
    878c454 - Fix one last test to reflect changes from 1d46f53a05be4b192561a066fcca3b40f5ff6f1c <Mark Amery>
    b29d0d3 - Modify expected output of MySQL tests to match new output as of 1d46f53a05be4b192561a066fcca3b40f5ff6f1c <Mark Amery>
    1d46f53 - Add MySQL-specific getModifyTableDDL that always uses one statement <Mark Amery>
    d9c8852 - Add test for <Mark Amery>
    c4c43a2 - Added missing SetColumnConverter Unit-Test <Moritz Schroeder>
    913de4f - Added a SET column type a combination of ARRAY and ENUM columns <Moritz Schroeder>
    2951d22 - Merge pull request #1107 from peter17/master <Marc J. Schmidt>
    2534923 - Update README, composer and circle for PHP-5.5. <Peter Potrowl>
    a3a762e - Merge pull request #1104 from staabm/patch-1 <Marc J. Schmidt>
    13a42b9 - removed php5.4 from travis build. <Markus Staab>
    8bf2db8 - Merge pull request #1067 from staabm/findMethod <Marc J. Schmidt>
    ab0823d - Merge pull request #1091 from Big-Shark/collection <Marc J. Schmidt>
    a902c29 - Merge pull request #1099 from eelkevdbos/patch-2 <Marc J. Schmidt>
    88a6709 - Merge pull request #1097 from nibsirahsieu/issue_989 <Marc J. Schmidt>
    96293cb - Merge pull request #1103 from thomaschaaf/patch-1 <Marc J. Schmidt>
    6988ac3 - Add identifierQuoting to archive behavior tables <Thomas Schaaf>
    f031ed1 - updated blog-database.xml file to match tests <Eelke van den Bos>
    e1019a6 - updated blog-schema.xml file to match tests <Eelke van den Bos>
    b986d4e - Added: config unique constraint of slug_column <Eelke van den Bos>
    ef44928 - Fixed custom collections <Big_Shark>
    c64281c - fixed issue #989 <Yunan NSNT>
    3ed06ae - fixed quoting test <Yunan NSNT>
    db5bbda - Merge pull request #1089 from nibsirahsieu/pgsql_test_parse <Marc J. Schmidt>
    e7af4a7 - set schema to 'public' <Yunan NSNT>
    3896b78 - Merge pull request #1084 from SCIF/issue-1080 <Marc J. Schmidt>
    31ae3a6 - Fixed #1080. Made init command works in 2.3 and in 3.0.* <Alexander Zhuravlev>
    9c4bb81 - fixed failing test for db=agnostic <Yunan NSNT>
    34cb445 - added test for invalid input <Yunan NSNT>
    3726cf9 - groupByArray <Yunan NSNT>
    4390115 - fixed issue #848 <Yunan NSNT>
    f6641f2 - Merge pull request #1064 from oujesky/tests-windows <Marc J. Schmidt>
    27f0281 - Merge pull request #1078 from nibsirahsieu/fix_schema_psql <Marc J. Schmidt>
    7ba2a2c - Merge pull request #1073 from Big-Shark/fixed_sqlite <Marc J. Schmidt>
    772f7ec - Merge pull request #1075 from Big-Shark/patch-1 <Marc J. Schmidt>
    8fd7f18 - bug fix multiple 'XML Schema' with different 'database schema' <Yunan NSNT>
    4ebcb9d - Merge pull request #1077 from SwissalpS/patch-1 <Marc J. Schmidt>
    1933cf9 - optimize loop in propel.php <Luke aka SwissalpS>
    2ac52d5 - Added file <Big_Shark>
    272e34d - Fixed sqlite test <Big_Shark>
    7d863cb - Merge pull request #1059 from Big-Shark/fixed_ci <Marc J. Schmidt>
    cfd7f36 - Merge pull request #1015 from geolysis/master <Marc J. Schmidt>
    bf94b2e - Merge pull request #1045 from Alekc/master <Marc J. Schmidt>
    91fbf95 - Merge pull request #1063 from prgTW/patch-1 <Marc J. Schmidt>
    c4f7583 - Merge pull request #1060 from Big-Shark/symfony3 <Marc J. Schmidt>
    19dc477 - Merge pull request #1072 from staabm/delclean <Marc J. Schmidt>
    8003d93 - Merge pull request #1027 from pimpreneil/many-to-one-form <Marc J. Schmidt>
    56d4e98 - Migrate for travis <Big_Shark>
    8ad1e8f - dont return from *Filter, code is "returned" by ref. <Markus Staab>
    0405859 - dropped 2nd arg passed to findMethod. The method only has one arg. <Markus Staab>
    09d394b - added a warning when xdebug is loaded in cli <Markus Staab>
    7d8bafb - Cache method information in PhpParser. <Markus Staab>
    926098a - Compatible with Symfony3 <Big_Shark>
    108e8f6 - fixing serialization issues <Tomasz Wójcik>
    76a9b6d - Fix the child deletion issue in many-to-one form - #968 <Arnaud Lejosne>
    1eaba73 - Added setup scripts for unit test databases on Windows <Miroslav Oujesky>
    84ac473 - Ignored tests depending on chmod on Windows <Miroslav Oujesky>
    0d49957 - Fixed rmdir on Windows <Miroslav Oujesky>
    9aff652 - Merge pull request #1049 from eelkevdbos/patch-1 <Marc J. Schmidt>
    2667854 - Merge pull request #1055 from motin/migration-create-command <Marc J. Schmidt>
    c35b3fc - Merge pull request #1058 from motin/fix-warnings-in-issue-1052 <Marc J. Schmidt>
    30f4659 - Fixed namespace for QuickBuilder <Fredrik Wollsén>
    4360dc3 - Merge pull request #1056 from motin/fix-issue-1052 <Marc J. Schmidt>
    0203c24 - Fixes fatal error in test suites. (Original commit message: Fixed php7 test suites) <Fredrik Wollsén>
    278cdcf - Added migration create command for creating empty migration classes <Fredrik Wollsén>
    6af467d - Small changes to match exact amount of linebreaks <Eelke van den Bos>
    d031637 - Modified tests to handle transaction support <Eelke van den Bos>
    6423d5e - Implemented migration transactions for PostgreSQL <Eelke van den Bos>
    5204a45 - Merge pull request #1047 from motin/include-identifier-quoting-in-schema-xml <Marc J. Schmidt>
    8c583d5 - Include identifierQuoting in schema.xml <Fredrik Wollsén>
    b44cffa - Implemented method getColumnValues for export of column values. <Alexander Chernov>
    bab0021 - Merge pull request #1042 from propelorm/revert-1000-tr <Marc J. Schmidt>
    4c9fdb6 - Revert "Migrate from circle to travis" <Marc J. Schmidt>
    0299c23 - Merge pull request #1000 from Big-Shark/tr <Marc J. Schmidt>
    24a6720 - Merge pull request #1038 from lbarulski/fix/issue/1037 <Marc J. Schmidt>
    299c7f4 - fixes #1037 <lukasz.barulski>
    df50413 - selecting column from joined table throws exception (tests for #1037) <lukasz.barulski>
    c8f65e6 - Added circleci <Big_Shark>
    a21912f - Merge pull request #1029 from nymo/1025 <Marc J. Schmidt>
    fd83f88 - Merge pull request #1030 from MadTiago/master <Marc J. Schmidt>
    6250ce2 - Adjusted pull request 1015: <geolysis>
    f9c8bec - Merge pull request #1034 from eelkevdbos/eelkevdbos-fix-1033 <Marc J. Schmidt>
    d63e579 - Added tests for #1033 <Eelke van den Bos>
    9f9270e - Fix #1033 prevent static properties from serializing <Eelke van den Bos>
    3dd4e0c - Init command now allows you to choose mysql port <MadTiago>
    af2413e - pager always 0 when no results fixes #1025 <nymo>
    27bb4ec - Merge pull request #1026 from dereuromark/master-cleanup <Marc J. Schmidt>
    f4efbe0 - Consistently use PHP5.4 brackets. <Mark Scherer>
    4325469 - change parentClass to baseQueryClass following @marcj comment + patch ressources + tests + dumper <Jeremy Denoun>
    db4d9fd - Merge pull request #1016 from kitsunde/patch-2 <Marc J. Schmidt>
    68dd856 - Merge pull request #1011 from flexarts/fix-mssql-support <Marc J. Schmidt>
    cc6279a - Merge pull request #996 from ktounet/fix-removed-table-migrate <Marc J. Schmidt>
    dc45cf2 - Merge pull request #1007 from ideSoluciones/master <Marc J. Schmidt>
    d2a2503 - Merge pull request #1021 from lbarulski/fix/basic-model-criterion <Marc J. Schmidt>
    8dabd73 - Merge pull request #1022 from lbarulski/fix/datetime-to-array <Marc J. Schmidt>
    11df4f4 - Merge pull request #1014 from jeffblack360/patch-issue-767 <Marc J. Schmidt>
    264713d - Merge pull request #1024 from dereuromark/bugfix/bad-inline-assigment <Marc J. Schmidt>
    5c57e69 -  Remove bad practice of inline assignment in general. <mark>
    03c58d9 - Fix error of inline assignment creating false positives with ! negation. <mark>
    c176cd6 - save timezone in result of toArray method <lukasz.barulski>
    9ecb873 - fixed question mark recognition <lukasz.barulski>
    0d1597a - fix method for use table first <Jeremy Denoun>
    f79aff2 - Proposal for implement a ParentClass for query objects at database or table level <Jeremy Denoun>
    59bfd93 - vendor element missing from DTD <Kit Sunde>
    04e1df0 - Add support for named UNIQUE index creation for mssql platform <Dominic Winkler>
    49dab65 - Implement use statement for baseClass <geolysis>
    45fd347 - Update <JB>
    1cde36e - Update <JB>
    e8f1610 - Add link to Propel2 documentation for what's new <jeffblack360>
    546290f - Update unit tests to reflect changes in mssql schema building <Dominic Winkler>
    23a55d5 - Fix several errors when using mssql plattform for reverse engineering, building and migrations <Dominic Winkler>
    ee659fa - Fixes issue #892 <Pawel Oronowicz>
    f22de18 - Merge pull request #805 from acim/master <Marc J. Schmidt>
    5c179e1 - Merge pull request #916 from david0/master <Marc J. Schmidt>
    f43eb81 - - Adjusted query for get the indices and the way to explore the answer, for the reverse engineer in Oracle databases. <Juan Molina>
    6040af9 - Merge pull request #1 from gulaandrij/patch-1 <Maxim>
    e58f257 - Update <gulaandrij>
    32e7969 - Updated build status badge <Big_Shark>
    5f58bff - Remove circle <Big_Shark>
    8457a82 - Added travis hooks <Big_Shark>
    f7288d8 - Fixed schema for Issue646Test <Big_Shark>
    3e2eb4a - Fixed namespace for QuickBuilder <Big_Shark>
    7584135 - Fixed php7 test suites <Big_Shark>
    c0720ad - Migrate for travis <Big_Shark>
    f118f82 - Merge branch 'master' of <Boban Acimovic>
    eadfdf2 - Merge pull request #992 from ktounet/master <Marc J. Schmidt>
    51e6664 - Merge pull request #990 from dylanvorster/master <Marc J. Schmidt>
    097b213 - Merge pull request #983 from Big-Shark/fixed_profiler <Marc J. Schmidt>
    4bab976 - Merge pull request #993 from ktounet/fix-schema-delegate <Marc J. Schmidt>
    d8c4cd2 - Merge pull request #997 from ikeyan/patch-1 <Marc J. Schmidt>
    c0aa36e - Update propel <ikeyan>
    1dd763b - Fix removed tables with a another schema than "public" are now catched by the parser (PostgreSQL) <Geoffrey Vincent>
    ba6a9a7 - Fixed toArray() for compatibility with schema Fixed indent if there is multiple tables into the parameter 'to' <Geoffrey Vincent>
    fa11f5f - Fixed invalid "schemaAutoPrefix" build property <Geoffrey Vincent>
    f21cbc5 - Add description to column attribute's comment <Geoffrey Vincent>
    040370e - Added a command line option for composer-dir <Dylan Vorster>
    cbaf232 - Fixed profiler configuration <Big_Shark>
    d2f8b89 - Fix #915  serialize custom properties in __sleep <David>
    b9fe16f - Merge pull request #931 from jeremydenoun/propel-pdodebug <Marc J. Schmidt>
    1cf0209 - Merge pull request #947 from draev/master <Marc J. Schmidt>
    d8633c6 - Merge pull request #967 from pimpreneil/sortable-enum-patch <Marc J. Schmidt>
    39f1c85 - Merge pull request #961 from EVILoptimist/simple_count_fix <Marc J. Schmidt>
    8343998 - Merge pull request #958 from Big-Shark/master <Marc J. Schmidt>
    b7be11b - Fix #954 - Sortable behavior on enum scope <Arnaud Lejosne>
    1b91719 - Test to verify a simple query results in a simple count. <Adam Wilson>
    e3cb16e - Update doCount() to more closely match existing implementation. <Adam Wilson>
    edeb1d5 - Fixed #907, one more important assertion <Marc J. Schmidt>
    c823221 - Add JoinWith phpdoc <Big_Shark>
    455c8fe - fixed typo <Marc J. Schmidt>
    22aaaa5 - Fixed init command, using now given user/password for reverse database. Scoped quickBuilder's file ouput <Marc J. Schmidt>
    a4569a8 - Update MigrationStatusCommand.php <Dmitrii Raev>
    dcbc2a5 - Update MigrationMigrateCommand.php <Dmitrii Raev>
    f51b021 - Update MigrationDownCommand.php <Dmitrii Raev>
    0fb68c4 - Update MigrationUpCommand.php <Dmitrii Raev>
    e47b00d - Fixed #804, fixed constant names generation <Boban Acimovic>
    33526a0 - Fix PDO Statement Wrapper for correctly return getExecutedQueryString with parameter <Jeremy Denoun>
    23ec23a - Reverted composer.json <Boban Acimovic>
    556632d - Reverted QuickBuilder <Boban Acimovic>
    d56e510 - Merge remote-tracking branch 'upstream/master' <Boban Acimovic>
    24a0c01 - Fixed usage of php binary <Boban Acimovic>
    c36b645 - Furhter fix in TableMapBuilder <Boban Acimovic>
    a29da64 - Fixed constant names <Boban Acimovic>
    67117bf - Merge remote-tracking branch 'upstream/master' <Boban Acimovic>
    d7ce34b - Further improved test <Boban Acimovic>
    55e709e - Improved test <Boban Acimovic>
    9bbc9f0 - Improved ConstantNameTest <Boban Acimovic>
    acea698 - Refs #804 - Added ConstantNameTest, modified QuickBuilder to supress include errors <Boban Acimovic>
    9b11fe2 - Added ConstantNameTest, modified QuickBuilder to supress include errors <Boban Acimovic>
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0-alpha5(Jun 27, 2015)

    More fixes and tests to stabilize Propel2.

    4214adc - Added skipping exclude_tables values on reverse and diff command. Fix #923 <Alexander Zhuravlev>
    73ccedc - Added removeTable() method to Database class <Alexander Zhuravlev>
    06ab419 - Added "exclude_tables" as root node to config <Alexander Zhuravlev>
    fa361a4 - Prefer dist in composer <Marc J. Schmidt>
    e9e8a2f - Fix referenceOnly bug <Michael Knapp>
    8e12750 - Fixed #907, return now always the write-connection for getReadConnection if write-connection has open transaction <Marc J. Schmidt>
    057fc51 - DelegateBehavior: double defined fields now skips instead of throwing exception <Alexander Zhuravlev>
    8b32cd2 - Added 'indices' option to VersionableBehavior <Marc J. Schmidt>
    06914b7 - DelegateBehavior: filterBy(), filterBy*(), orderBy*() now works for delegated properties in generated Query. Fixed toArray() if column array <Alexander Zhuravlev>
    b411c0a - DelegateBehavior: toArray() now returns properties of delegated tables <Alexander Zhuravlev>
    d8eada9 - Fix PostgreSQL's default port running the init command <Robin Dupret>
    d26148e - Fix PgsqlPlatform::getMaxColumnNameLength() <Yuriy>
    2e9f1a2 - Added unit test for mySQl addColumn FIRST logic <Moritz Schroeder>
    8bd5656 - Fix issue #768: wrong DateTime comparison in setter methods <Ansas>
    b9eff7b - Don't set scale to null if scale is not null or 0 <Kai Richard Koenig>
    ab03e63 - Don't set the size to null when a scale is used <Kai Richard Koenig>
    ccf8aeb - Add test to ensure decimal default size is preserved when scale is used <Kai Richard Koenig>
    5839c97 - Be more verbose about what the fix is about in the tests <Kai Richard Koenig>
    2367e22 - Explicitly check for null since a scale of 0 is still valid <Kai Richard Koenig>
    25fad62 - Add expected reversed xml-schema <Kai Richard Koenig>
    a7b774e - Add field decimal field with 0 scale to the database <Kai Richard Koenig>
    f31ee30 - Update ObjectCollectionTest.php <SofHad>
    412e897 - Fix a few typos [ci skip] <Robin Dupret>
    24538e6 - Migration: Missing "AFTER"/"FIRST" when adding columns (MySQL) <Moritz Schroeder>
    0e6f18d - `ModelCriteria::clear()` resets the `$select` value <Maciej Łebkowski>
    96033d3 - Fixed memory usage in OnDemandFormatter by not caching hydrated instances <Alexander Pinnecke>
    bf54160 - Fixed #711 by throwing an excetion if one try to add a foreign key twice <Alexander Pinnecke>
    de1c8a7 - Fix #865: set limit to -1 in clear method <Alexander Pinnecke>
    256880b - Fix usage of addSelfSelectColumns in context of withColumn usages <Alexander Pinnecke>
    3418895 - fix typehining on generated doc blocks by adding default 'mixed'' value <Alexander Pinnecke>
    2641d6a - Added polimorphic joining ability from one to many <Alexander Pinnecke>
    56dbd1c - Fixed memory leak and improved performance in collection iterator. <Marc J. Schmidt>
    f0ce90c - Fixed setter for objects columns <Moritz Schröder>
    0e05013 - Fixed memory(connection) leak, which led to "too many open connections" for long running processes/tests suits. <Marc J. Schmidt>
    f20146a - Added support for polymorphic relations. Fixes #487. <Marc J. Schmidt>
    ab7d993 - Added "typeHint" to column element and "interface" to foreign-key element. Fixed #84. <Marc J. Schmidt>
    c89ee81 - improved nested_set behavior <Gregor Harlan>
    09143af - added requirePk method <Gregor Harlan>
    07258df - Improved error message when external schema cannot be found <Marc Scholten>
    842612e - Added getJoin/hasJoin to Criteria. <Marc J. Schmidt>
    3a2bc56 - Changed toArray to format temporal columns as ISO8601 strings <Marc Scholten>
    fac953c - Added requireOne, requireOneBy, requireOneByArray methods to Models <Marc Scholten>
    993bc02 - Convert DateTime to ISO8601-String in JsonParser before calling json_encode <Marc Scholten>
    40d0bab - Fixed #833, Fixed #834 - migrations: hard-fail now per default and added --fake option. <Marc J. Schmidt>
    49ca0b7 - Add exists() to the ModelCriteria. <Kit Sunde>
    9127583 - Added postHydrate hook back. <Marc J. Schmidt>
    08cff17 - Fix migration of unique/index keys <David Pavlík>
    ef8cb46 - fixed enum column usage in where() without value parameter <Gregor Harlan>
    7a2f79e - Return in doSave() the correct $affectedRows value. <Marc J. Schmidt>
    2e8dcdf - added 'exclude_behaviors' parameter to concrete_inheritance behavior to exclude behaviors from parent in child table <Pierre Minnieur>
    887bfed - Fixed SqlParser for Triggers that use `delimiter` statement of mysql. <Marc J. Schmidt>
    814e3bb - allow whitespace folders for setup database scripts escape also username host and password <nymo>
    49f0c6c - Removed comment at the closing brace of Extension Query Classes to conform psr-1/psr-2 <Marc Scholten>
    7a6691c - Fixed bug with hydrating objects that belong to another object through a many-to-one relation. <Marc J. Schmidt>
    b0c2533 - Fix ignore `generator.platformClass` property <Cristiano Cinotti>
    3094f64 - Fix issue #791 <Cristiano Cinotti>
    c13ca73 - Fixed migration with TRIGGERs. <Marc J. Schmidt>
    63ee268 - Made the sorting in getSchemas per default by name. <Marc J. Schmidt>
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0-alpha4(Nov 20, 2014)

    More fixes and tests to stabilize Propel2.

    Added new configuration system and made PropelBundle (branch 2.0) workable with this version.

    8666ef4 - Fixed typo in ConcreteInheritance behavior. <Marc J. Schmidt>
    1541297 - Don't require $DB_PW <Matthew Leffler>
    775cd68 - Actually take $DB_PW from the command line <Matthew Leffler>
    74d6d61 - Fixed #812 - Added `copy_data_to_child` parameter to ConcreteInheritance behavior. <Marc J. Schmidt>
    74e87ac - Removed defaultValue for `platformClass` in tree definition. Detect platform and reverseParser classes now in GeneratorConfig. <Marc J. Schmidt>
    9f453d2 - Added `overwrite` option to SqlBuildCommand. <Marc J. Schmidt>
    f8f6f11 - Configuration refinements <Cristiano Cinotti>
    6d221b6 - Default connection is no more required <Cristiano Cinotti>
    3b95b3a - Fix issue 806 <Cristiano Cinotti>
    3a0cbcb - Added note about the roadmap <Marc Scholten>
    82823c9 - Updated link of propel installation guide to really link to the installation guide <Marc Scholten>
    edfd3a5 - Split '--input-dir' option in two more self-explained ones <Cristiano Cinotti>
    066a6d7 - Update .gitignore <Cristiano Cinotti>
    17e0788 - fix 763 renamed command sql to build-sql to avoid ambiguous <nymo>
    4857392 - Misconfigured connections throw exception <Cristiano Cinotti>
    95aebd3 - - Adding keyType parameter to importFrom, so user can select what TableMap to use (and not only TableMap::TYPE_PHPNAME) <Xavier Martin>
    7743b74 - Removed never read var <Markus Staab>
    2302f06 - Optimized method name. ref #745 <Marc J. Schmidt>
    6c9848e - Fixed #745 - Added correct method for ObjectCollection getter with intuitive filter for cross relation methods having additional primary keys. <Marc J. Schmidt>
    0425d58 - Fix issue 766 <Cristiano Cinotti>
    115c20e - Fixed #708 - handle the disable-namespace-auto-package option for model:build command correctly. <Marc J. Schmidt>
    c07844c - Closed #696 - PostgreSQL/SQLite platform does not generate useless migration diffs for numeric size/scale columns anymore. <Marc J. Schmidt>
    7d0b603 - Fixed #748 - reverse command sets now as database-name the given connection name if database-name is not defined and connection is not a dsn. <Marc J. Schmidt>
    cb09e05 - Fixed #656 - Pluralisation a CrossFk name now generates the correct name. <Marc J. Schmidt>
    17560d0 - Raise php version to 5.4.9 due to a bug in PDO's ATTR_EMULATE_PREPARES. <Marc J. Schmidt>
    3fe02f1 - Fixed #625 - display now full exception trace when `reverse` command failed. Use `oci:` in OracleAdapter. Allow `reverse` command to specify a connection name instead of the full dsn. <Marc J. Schmidt>
    a9739e4 - Allow to specify now platform shortcuts like mysql/Mysql instead of providing the full MysqlPlatform as cli --platform option. <Marc J. Schmidt>
    f04f87c - Forks should not generate the expensive coverage report in our ci build. <Marc J. Schmidt>
    2737e20 - Removed last refs <Marc J. Schmidt>
    fc8ee60 - Activated phpunit coverage only in ci environment. <Marc J. Schmidt>
    08ad3ff - Fixed gitter link. <Marc J. Schmidt>
    66bc460 - Fixed gitter link. <Marc J. Schmidt>
    21707cb - changed badget style of circle <Marc J. Schmidt>
    b18627b - Added new gitter badge and circle hook for it. (corrected) <Marc J. Schmidt>
    58192fa - Added new gitter badge and circle hook for it. <Marc J. Schmidt>
    fa2595d - Let Pgsql determine real schema names <Developer rantl>
    393e5ac - added new status badges <Marc J. Schmidt>
    f2d5610 - Added circle-ci <Marc J. Schmidt>
    62859fd - Fixed wrong mapping in reversed schema for mediumblob/longblob/object. <Marc J. Schmidt>
    68aeb69 - Added quoting identifier in runtime. Removed uppercased field names. <Marc J. Schmidt>
    c658c22 - Fix usage of incorrect '@expectedMessage' annotation in tests <Kévin Gomez>
    9c0a280 - Forbid dots in connection names <Kévin Gomez>
    0694af1 - Fix issue 694 <Cristiano Cinotti>
    6db40dd - Fixed psr2 violation: There must be one blank line after the last use statement; two found <Marc Scholten>
    62fe9ab - Fixed missing return statement in SqlitePlatform::getAddColumnsDDL. Fixes #644. <Marc J. Schmidt>
    bfc9781 - ReadOnly tables have now protected setter methods. Fixes #629. <Marc J. Schmidt>
    5449b2c - Don't quote all mysql table options per default. Fixes #627. <Marc J. Schmidt>
    da58276 - Enabled packageObjectModel per default as stated in the documentation. <Marc J. Schmidt>
    a43048e - Fixed wrong class name declaration in object builder. <Marc J. Schmidt>
    ecdb5d5 - Added propel init command <Marc Scholten>
    27c01b8 - Split the configuration definition <Kévin Gomez>
    1c8a373 - Created i18n_pk_column parameter which allow to set custom primary key column on i18n table <Miroslav Oujesky>
    2122ca2 - Added testcase for the fix <Miroslav Oujesky>
    e6762a7 - fixed generator for locale_column parameter <Miroslav Oujesky>
    7d2b16c - reverse command: change argument mode <bondarovich>
    37bb256 - Fix link to the contribution guideline [ci skip] <Robin Dupret>
    8afecde - Update OracleSchemaParser.php <Mihail>
    e01f214 - more fetchAll tests <Elan Ruusamäe>
    c2ed0a0 - PDO (and many other builtin functions) does not like extra parameters <Elan Ruusamäe>
    8451946 - Fix #712 <Daniel Drozdovich>
    b277a33 - Fix #709 <Daniel Drozdovich>
    1652a90 - remove isRequired from connection classname config <Toni Uebernickel>
    c74fa0c - Propel2-710 Propel compatibility with Symfony 2.5 components <nymo>
    fcf8a2c - added migrationDir config option <Gregor Harlan>
    ae1a39e - Fix issue #697 <Cristiano Cinotti>
    5b08423 - Update QueryBuilder.php <sbarex>
    9f0fcde - Update ObjectBuilder.php <sbarex>
    ea17cf0 - Made runtime.connections, runtime.defaultConnection, generator.connections and generator.defaultConnection optional <Marc Scholten>
    30b50f5 - Update database.dtd <sbarex>
    fc684ab - Made config file optional <Marc Scholten>
    c6afd5f - Update database.dtd <sbarex>
    d4e2cb1 - Propel2-619 Propel Query limit(0) not working <nymo>
    13f9d59 - update minimum requirements for symfony libraries <nymo>
    2c7d044 - Fix issues #676, #668, #694 <Cristiano Cinotti>
    617eb0d - 646: toArray() fails to recognise Primary Key as DateTime <nymo>
    8f32889 - Fix Propel TreeBuilder <Cristiano Cinotti>
    d50270e - Revert "Removed some unused code" <Marc J. Schmidt>
    4e638eb - Fixed test suite and added vendor/bin/phpunit to phpunit boot scripts. <Marc J. Schmidt>
    08e74a9 - Default value in the documentation of toXXX() <Julien Ferrier>
    6f56e4e - Removed some unused code <Marc Scholten>
    4c1b54c - Fixed generated docblock of ObjectBuilder for temporal accessors telling \DateTime is returned, but in reality it returns $dateTimeClass (as defined in the config) <Marc Scholten>
    242fbb8 - Fixed php doc block in AbstractCommand <Marc Scholten>
    2053f88 - toArray with includedForeignObjects should not prefix the arrays of foreignObjects <Marc Philip Scholten>
    a475bf8 - Fixed #583 - Generation of diffs with default type sizes defined. <Marc J. Schmidt>
    cf96b7c - Fix issue #668 <Cristiano Cinotti>
    501cfb8 - Fixed XmlParser not recognising DateTime objects when dumping to XML <Marc Scholten>
    1992d88 - Fix issue #669 <Cristiano Cinotti>
    fb7aa33 - Fixed #633 - Added `hasConnectionManager` to serviceContainer. <Marc J. Schmidt>
    b412f08 - Expand ColumnTest to include testcases for new singular form phpName feature <Bas van Schaik>
    8bea183 - don't tell lies about the origin of the auto-generated value <Bas van Schaik>
    23df832 - Introduce Column->getPhpSingularName() and use it where appropriate. The phpSingularName property of Column is initialised using the new 'phpSingularName' attribute for columns in the schema, or (if not specified in schema) generated based on the column's phpName. <Bas van Schaik>
    0d14bad - Use Column->getSingularName() where applicable <Bas van Schaik>
    f79428a - update schema XSD definition to allow for specifying a column's singular form <Bas van Schaik>
    ad3eb32 - Configuration System Refactor - Step 3 <Cristiano Cinotti>
    45fdfb0 - Only allow the id parameter for behaviors which accept it <Kévin Gomez>
    11e299c - Allow the same behavior to be registered multiple times <Kévin Gomez>
    0d7d507 - Configuration system refactor - step 2 <Cristiano Cinotti>
    689fc51 - Configuration system refactor - step 1 <Cristiano Cinotti>
    3f2fef9 - [migrations] add optional comment for migration <jaugustin>
    c695d1d - [migrations] add parameters to skip excluded or removed table from migration <jaugustin>
    250eced - Throw an exception when no connection has been defined for a database (fixes #620) <Kévin Gomez>
    fd93a38 - allow custom collection in ObjectFormatter <Toni Uebernickel>
    aa4a802 - Fix QuickBuilder classTargets initialization <Kévin Gomez>
    de41270 - Improved test suite runtime drastically and remove travis jobs for hhvm+pgsql and hhvm+sqlite <Marc J. Schmidt>
    b03cc6a - Fixed test suite for current master <Marc J. Schmidt>
    5693c14 - Added test for Table::testIsIndex <Marc J. Schmidt>
    10ac9e9 - Removed doInsert in Runtime\Map\TableMap <Marc J. Schmidt>
    caccb96 - Removed ColumnValue and DataRow classes <Marc J. Schmidt>
    f86ed34 - Removed DataSQLBuilder stuff as its not in use. <Marc J. Schmidt>
    878aeca - Removed ObjectBuilder::addFKByKeyMutator because its nowhere used. <Marc J. Schmidt>
    c6a66a9 - Added test for TableDiff::__toString <Marc J. Schmidt>
    a54e9cb - Renamed --exclude-schema to --exclude-database in TestPrepareCommand <Marc J. Schmidt>
    c341508 - When DB is agnostic we use MysqlPlatform to build the fixtures model classes. <Marc J. Schmidt>
    5418a21 - Setup only for integration tests <Marc J. Schmidt>
    2e076c4 - Separated database agnostics tests and integration tests. <Marc J. Schmidt>
    f745366 - Fixed tests of migration commands. <Marc J. Schmidt>
    7906db7 - Setup now the fixtures during the test suite to have more realistic code coverage values. <Marc J. Schmidt>
    908a6be - Improved the description of some commands. <Marc J. Schmidt>
    3d5635e - Added test for DatabaseReverseCommand <Marc J. Schmidt>
    9d0f7af - Added tests for SimpleEnglishPluralizer <Marc J. Schmidt>
    2bcb49a - Fixed GraphvizManager with displaying foreign key relations <Marc J. Schmidt>
    7d10c79 - Added tests for migration commands <Marc J. Schmidt>
    5c767c2 - Added tests for GraphvizGenerateCommand <Marc J. Schmidt>
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0-alpha3(Apr 16, 2014)

    More fixes and tests to stabilize Propel2.

    2475d76 - Fixed #597, fixed broken joinType comparison <stevleibelt>
    830cd9b - Fixed #609 - remove setters when readOnly <Marc J. Schmidt>
    ef1e4eb - Fixed #477, Fixed #607, Fixed #604, Fixed #610 <Marc J. Schmidt>
    e3810e0 - Fixed 'object' column type to allow saving the same object. <Marc J. Schmidt>
    dd599ce - Made Sluggable port #376 compatible with all databases <Marc J. Schmidt>
    eeda660 - Fixed #568 - Fixed index schema migration functionality <Marc J. Schmidt>
    db70868 - Fixed typo in XMLDumper. <Marc J. Schmidt>
    e02b068 - Fixed #455 - added timestampable options `disable_updated_at` (back) and new `disable_created_at` <Marc J. Schmidt>
    5be861d - Fixed #598 - changed internal sql type from text to binary for propel type OBJECT. <Marc J. Schmidt>
    442115c - Update AbstractFormatter.php <sbarex>
    cf4e28b - Ref #480 - Fixed attribute 'PROPEL_ATTR_CACHE_PREPARES' <Marc J. Schmidt>
    9b7b79f - Fixed #513 - don't overwrite <Marc J. Schmidt>
    20a5842 - added sql-dir option as working directory <Dmitry.Krokhin>
    4901e3b - cs fixes applied <Marc J. Schmidt>
    c174239 - Fixed #588 - Third parameter not allowed for PDO::FETCH_COLUMN <Marc J. Schmidt>
    bfa4ac3 - Fixed #564 - build crashes when no primaryKey on autoIncrement column <Marc J. Schmidt>
    290eca7 - Fixed #488 - i18n behaviour double prefix table names <Marc J. Schmidt>
    4cc5092 - Fixed #529 - MysqlSchemaParser ForeignTable not found <Marc J. Schmidt>
    f0d1929 - use IteratorAggregate for Collections, so nested iterations are possible <Gregor Harlan>
    3a2467d - Fixed #500 - table prefix gets added to the class name <Marc J. Schmidt>
    8fcf069 - Fixed #483 - nested set orderByLevel <Marc J. Schmidt>
    ca6b77e - Fixed #475 - MySQL Migration bug with indices <Marc J. Schmidt>
    e118ff3 - boolean columns like "has_foo" get a hasser method "hasFoo()" <Gregor Harlan>
    670d2e0 - fixed generated docs <Gregor Harlan>
    5189d16 - use transaction(), remove obsolete commit() <Gregor Harlan>
    903470b - feat(MigrationManager): Rollback comment <jaugustin>
    ccc2cc0 - fix(MigrationManager): rename method updateLatestMigrationTimestamp <jaugustin>
    a1c9668 - Added parallel migrations <Marc Philip Scholten>
    4de0374 - fixed declaration of methods on Profiler classes <Livio Ribeiro>
    e9e8b3d - Fixed relation handling. Fixed #473, #518, #262. <Marc J. Schmidt>
    732b543 - added missing return statement <Gregor Harlan>
    d113820 - use transaction() <Gregor Harlan>
    c8080b0 - added TransactionTrait, fixes nested transactions <Gregor Harlan>
    fca101a - Made Propel HHVM compatible with MySQL. <Marc J. Schmidt>
    1260fcd - transaction: always return the result of callable <Gregor Harlan>
    58f869a - return type hint for endUse() <Gregor Harlan>
    a71bd9d - Fix getting option value from configuration <Heikki Hellgren>
    20fb976 - fix for missing base query classes <Gregor Harlan>
    f10e3a0 - Readonly tables should not have an importFrom method (see issue #543) <Marc Philip Scholten>
    02a9444 - use "@return $this" for fluent style methods <Gregor Harlan>
    f23cc76 - Fixed diff generator when several identical tables or columns were renamed <javer>
    c8d8126 - Added more verbose output to migration manager <Marc J. Schmidt>
    12001d0 - fixed path to composer.lock <Gregor Harlan>
    82e33b4 - fixed TimestampableBehaviorTest <Gregor Harlan>
    0698152 - fixed docs, type hints and imports <Gregor Harlan>
    7fa1660 - travis: use fast_finish option <Gregor Harlan>
    40b381e - removed SqlConnectionInterface <Gregor Harlan>
    72bf51b - added ConnectionInterface type hints <Gregor Harlan>
    60096fc - Update UniqueValidator.php <dsoares>
    5ce4e9c - Fixed MigrationManager::getMigrationDir call which should be MigrationManager::getWorkingDir instead <Marc Philip Scholten>
    f873f6d - add "isser" methods for boolean columns <Gregor Harlan>
    45c8be6 - optimized generated classes <Gregor Harlan>
    6001853 - PropelColumnTypes class used by bindValue method <Dmitry Krokhin>
    9151055 - Improvement to develop behaviors <gossi>
    c55bac4 - php 5.6 support <Gabriel Machado>
    cde157f - fixed enum param/return type <Gregor Harlan>
    6636c6c - Fixed "Undefined variable" in migration:status <livioribeiro>
    8b5fe57 - Install Behaviors with Composer <gossi>
    b704f5f - Delete test.sq3 <Marc J. Schmidt>
    8060e19 - Fixes #502 <gossi>
    e3599b4 - add recursive option to command for search in sub-dir for schema.xml fix #519 <fzerorubigd>
    e56bc76 - Fixed #520, related to #452 <Marc J. Schmidt>
    fed7670 - Fixed missing closing "database" tag. <Marc J. Schmidt>
    d1e3f06 - fix array casting in InCriterion and InModelCriterion. Fix #492 <Manuel Raynaud>
    7c71da2 - Fixes #508 <gossi>
    d05f094 - Added hhvm to travis config <Markus Staab>
    02b8661 - fix failing tests in ArrayToPhpConverterTest <Charles Sanquer>
    8c32a89 - must test if setIgnoreCase exists on each criterion <Manuel Raynaud>
    fbdc1b3 - Tables with no primary keys confused code generators <Kévin Gomez>
    a2b9369 - Fixed notice <Marc J. Schmidt>
    cd47368 - add compatible doCount and doSelect methods from query_cache behavior with ModelCriteria class <Manuel Raynaud>
    c32108e - Fixed memory leak in Collection class with a new implementation. <Marc J. Schmidt>
    5e27559 - Removed slow call_user_func and replaced it direct call. #478 - Performance increase 50+ms <Marc J. Schmidt>
    5389763 - Removed slow in_array and replaced it with isset for `modifiedColumns`. #478 - Performance increase 100ms <Marc J. Schmidt>
    b017852 - Fixed bug where tableMaps were not cached. #478 - Performance increase from 16,252,928bytes/3.284s =>  12,058,624bytes/2.170s <Marc J. Schmidt>
    dc1c45a - Changed old documentation-url to the new repository-url <Marc Philip Scholten>
    c957f77 - Fixed Exception was created with wrong constructor call <Marc Philip Scholten>
    d578844 - Add branch alias <William DURAND>
    4f2bb75 - Remove documentation/ folder <William DURAND>
    3e80681 - Little enhancement when displaying trees <Robin Dupret>
    97dab46 - Remove references to the old DBDesign cookbook <Robin Dupret>
    f186ee2 - Remove references about datasql and datadump commands <Robin Dupret>
    cd06cfb - Remove references to Phing <Robin Dupret>
    c0e8dcc - Fix a little typo on the number of generate classes <Robin Dupret>
    6097f68 - Fix Propel's bin location with Composer set up <Robin Dupret>
    172fd3c - Add Windows instructions to put propel bin in PATH <Robin Dupret>
    73775ea - Basic update for the documentation about BaseObject <Robin Dupret>
    7932256 - Update a little bit the doc for PHP 5.4 <Robin Dupret>
    3157aef - Remove mentions about dbd2propel <Robin Dupret>
    96da490 - Remove the Symfony 1.x documentation <Robin Dupret>
    6faab4f - Update svn co url since is out of date <Robin Dupret>
    815f8a0 - Update the contribution guideline <Robin Dupret>
    f28f53a - Move path pointing to propel to Composer's autoload <Robin Dupret>
    0c9ec7d - Update the references to the 1.x repository <Robin Dupret>
    03e73c4 - Update references to Propel 1.x generated folders <Robin Dupret>
    d88e281 - Fix symlink location in the installation guide <Robin Dupret>
    7ac3a27 - Fix a broken link to the MIT license <Robin Dupret>
    51d1b10 - Update for some deprecated objects and methods <Robin Dupret>
    fa4d9a3 - Update the deprecated commands <Robin Dupret>
    f78d29d - Remove deprecated doc related to PHP < 5.4 <Robin Dupret>
    37c474c - Add a link to github "How to create a pull request" article <Nicolas Bastien>
    80bf53c - Some migration fixes. <marcj>
    e4423c7 - Port new sluggable behavior <Marius Ghita>
    82e9924 - Sluggable failing tests (no. queries and regex) <Marius Ghita>
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0-alpha2(Sep 30, 2013)

The Enobrev\ORM library is a small framework of classes meant to be used for simply mapping a mysql database to PHP classes, and for creating simply SQL statements using those classes.

The Enobrev\ORM library is a small framework of classes meant to be used for simply mapping a mysql database to PHP classes, and for creating simply SQL statements using those classes.

Mark Armendariz 0 Jan 7, 2022
[READ-ONLY] A flexible, lightweight and powerful Object-Relational Mapper for PHP, implemented using the DataMapper pattern. This repo is a split of the main code that can be found in

CakePHP ORM The CakePHP ORM provides a powerful and flexible way to work with relational databases. Using a datamapper pattern the ORM allows you to m

CakePHP 146 Sep 28, 2022
A lightweight nearly-zero-configuration object-relational mapper and fluent query builder for PHP5.

Idiorm Feature/API complete Idiorm is now considered to be feature complete as of version 1.5.0. Whilst it wil

Jamie Matthews 2k Dec 27, 2022
Convention-based Object-Relational Mapper

Corma Corma is a high-performance, convention-based ORM based on Doctrine DBAL. Corma is great because: No complex and difficult to verify annotations

Michael O'Connell 30 Dec 20, 2022
Analogue ORM : Data Mapper ORM for Laravel/PHP

(this project is looking for a new maintainer) Analogue ORM Analogue is a flexible, easy-to-use ORM for PHP. It is a transposition of the Eloquent ORM

Analogue ORM 632 Dec 13, 2022
A simple PHP library to transfer data from a source (object or array) to an object.

SimplexMapper A simple PHP library to transfer data from a source (object or array) to an object. $dbData = [ 'username' => 'pfazzi', 'emailAd

Patrick Luca Fazzi 4 Sep 22, 2022
High performance distributed database for mysql

High performance distributed database for mysql, define shardings by velocity&groovy scripts, can be expanded nodes flexible...

brucexx 33 Dec 13, 2022
Doctrine PHP mapping driver

WORK IN PROGRESS! Doctrine PHP mapping driver Alternative mapping driver that allows to write mappings in PHP. Documentation Associations examples TOD

Andrey Klimenko 3 Aug 15, 2021
PHP DataMapper, ORM

Cycle ORM Cycle is PHP DataMapper, ORM and Data Modelling engine designed to safely work in classic and daemonized PHP applications (like RoadRunner).

Cycle ORM 1.1k Jan 8, 2023
Ouzo Framework - PHP MVC ORM

Ouzo is a PHP MVC framework with built-in ORM and util libraries. PHP 8.0 or later is required. We believe in clean code and simplicity. We value unit

Ouzo 69 Dec 27, 2022
Simple Enum cast for Eloquent ORM using myclabs/php-enum.

Enum cast for Eloquent Simple Enum cast for Eloquent ORM using myclabs/php-enum. Requirements PHP 7.3 or higher Laravel 8.0 or higher Installation You

Orkhan Ahmadov 5 Apr 21, 2022
Baum is an implementation of the Nested Set pattern for Laravel's Eloquent ORM.

Baum Baum is an implementation of the Nested Set pattern for Laravel 5's Eloquent ORM. For Laravel 4.2.x compatibility, check the 1.0.x branch branch

Estanislau Trepat 2.2k Jan 3, 2023
ORM layer that creates models, config and database on the fly

RedBeanPHP 5 RedBeanPHP is an easy to use ORM tool for PHP. Automatically creates tables and columns as you go No configuration, just fire and forget

Gabor de Mooij 2.2k Jan 9, 2023
A drop-in Doctrine ORM 2 implementation for Laravel 5+ and Lumen

Laravel Doctrine ORM A drop-in Doctrine ORM 2 implementation for Laravel 5+ $scientist = new Scientist( 'Albert', 'Einstein' ); $scientist->a

Laravel Doctrine 777 Dec 17, 2022
Extensions for the Eloquent ORM

Sofa/Eloquence Easy and flexible extensions for the Eloquent ORM. Currently available extensions: Searchable query - crazy-simple fulltext search thro

Jarek Tkaczyk 1.1k Dec 20, 2022
Builds Cycle ORM schemas from OpenAPI 3 component schemas

Phanua OpenAPI 3 + Jane + Cycle ORM = ?? Phanua builds Cycle ORM schemas from OpenAPI 3 component schemas. Released under the MIT License. WARNING: Th

Matthew Turland 5 Dec 26, 2022
Extra RedBean ORM

RedBeanPHP 5 RedBeanPHP is an easy to use ORM tool for PHP. Automatically creates tables and columns as you go No configuration, just fire and forget

GingTeam Development 5 Nov 23, 2022
Articulate - An alternative ORM for Laravel, making use of the data mapper pattern

Articulate Laravel: 8.* PHP: 8.* License: MIT Author: Ollie Read Author Homepage: Articulate is an alternative ORM for Laravel bas

Ollie Codes 4 Jan 4, 2022
MongoDB ORM that includes support for references,embed and multilevel inheritance.

Introduction Features Requirements Installation Setup Database Basic Usage - CRUD Relationship - Reference Relationship - Embed Collection Inheritance

Michael Gan 202 Nov 17, 2022