Doctrine e Propel usano due modelli differenti.
Doctrine (a partire dalla versione 2) utilizza il modello
entity manager: una classe si occupa di gestire le entità del database.
Propel adotta invece il modello
active record, usato anche dal framework Rails e forse più semplice: sono le stesse entità ad auto-gestirsi.
Per esempio, supponiamo che tu abbia un modello
Post. Con Doctrine per creare una nuova entità farai così:
PHP:
<?php
$post = new Post();
$post
->setTitle('Titolo')
->setBody('Contenuto')
;
// $em contiene un'istanza di Doctrine\ORM\EntityManager
$em->persist($post);
$em->flush();
Con Propel, invece, basta scrivere:
PHP:
<?php
$post = new Post();
$post
->setTitle('Titolo')
->setBody('Contenuto')
;
$post->save();
Io sono sempre stato piuttosto combattuto tra questi due modelli. Quello di Doctrine è semanticamente più corretto (un oggetto non si gestisce da solo, ma c'è un oggetto incaricato di gestirlo). Quello di Propel, però, è anche un po' più semplice (tra l'altro mi sto avvicinando a Rails che sfrutta il modello
active record, e lo sto trovando fantastico).
Con il secondo ho lavorato poco, perché Doctrine è nativamente integrato nel framework Symfony che uso da diverso tempo, e non ho mai sentito il bisogno di provare Propel. Ora che me l'hai ricordato, potrei darci un'occhiata giusto per sfizio.
Se cerchi della documentazione in italiano su Doctrine, puoi dare un'occhiata al capitolo dedicato nel sito di Symfony:
http://symfony.com/it/doc/current/book/doctrine.html. Tuttavia non potrai basarti esclusivamente su quello perché Symfony configura automaticamente l'ORM e molte sue funzionalità.
Questo tutorial, anche se scritto in inglese, è abbastanza semplice:
http://marco-pivetta.com/doctrine2-orm-tutorial/.