È uscito Propel 1.5

L’atteso rilascio della nuova versione di Propel è ufficiale proprio oggi. La novità maggiore è nella nuova API di oggetti Query, che si rifanno in parte a quelli di Doctrine, ma usando un’interfaccia fluida invece di un linguaggio pseudo-SQL. Ci sono inoltre nuovi behavior e l’ereditarietà concreta per le tabelle. Il tutto è stato mantenuto retrocompatibile con la versione 1.4. Già da ora è possibile usare Propel 1.5 in un progetto symfony, grazie a sfPropel15Plugin.
Ecco la lista completa delle novità.

IRC Meeting per il futuro di Propel

François Zaninotto e Sven Teitje, che hanno ufficialmente annunciato di aver preso in carico il progetto Propel con la mail qui di seguito, hanno indetto un IRC meeting per discutere del futuro dell’ORM.

Se avete qualche idea interessante, e voglia di comunicarla, l’appuntamento è sul canale #propel di Freenode il 10 Settembre alle 20.00.

Dear Propel devs / users,

Hans Lellelid, current lead of the Propel project, has agreed to leave the
project keys to François Zaninotto (for the 1.x branch) and Sven Teitje (for
the 2.x branch). Both François and Sven will do their best to help Propel
get better and get more users.

And because you probably all have lots of ideas, an IRC meeting is planned
on the #propel channel on freenode on Thursday, September 10th, at 8:00pm
West European Time (that’s 2:00pm East Coast time). Please come there to
explain your needs, offer your collaboration, discuss the project
management, and meet the new project leaders. If you can’t make it for the
IRC meeting, don’t hesitate to use the propel development mailing-list (
http://groups.google.com/group/propel-development).

François Zaninotto (francois) and Sven Teitje (tiddy)

Propel è morto. Evviva Propel.

Pare che il celeberrimo ORM non stia vivendo un bel periodo, infatti dopo una serie di messaggi su possibili problemi con PHP 5.3, Hans Lellelid (principale autore ed attuuale lead developer del progetto) ha ufficialmente annunciato che abbandonerà la sua creatura.

Fortunatamente però pare che Francois Zaninotto, già famoso per il il lavoro fatto sulla prima versione di symfony e di molta della sua documentazione, e Sven Tietje prenderanno in mano il tutto.

Non si sa però come e con quali modalità continuerà lo sviluppo di questo ORM, per ora quindi non ci resta che aspettare.

group by

Quante volte vi è capitato di dover fare una semplice group by per contare le righe di una tabella raggruppate per una data colonna? Per intenderci, quello che si fa in maniera semplicissima in SQL con

SELECT TYPE,COUNT(*) AS num FROM card GROUP BY TYPE;

Purtroppo con Propel la cosa non appare subito immediata. Ecco quindi un prezioso metodo da aggiungere alla vostra classe Peer per poterlo fare in modo semplice. Prima di tutto occorre inserire una nuova proprietà $count nel vostro modello (che nel mio esempio si chiama “Card”), con relativi getter e setter:

1
2
3
4
5
6
7
8
9
10
11
protected $count;
 
public function getCount()
{
  return $this->count;
}
 
public function setCount($count)
{
  $this->count = $count;
}

Ecco quindi il pezzo forte, in CardPeer (ricordate sempre che va adattato secondo il nome del vostro modello):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
 * grouped select
 * @param  Criteria $c
 * @param  string   $column
 * @return array
 */
public static function doSelectGroupBy(Criteria $c = null, $column)
{
  if (empty($c))
  {
    $c = new Criteria;
  }
  self::addSelectColumns($c);
  $c->addGroupByColumn($column);
  $c->addAsColumn('cnt', 'COUNT(*)');
  $stmt = self::doSelectStmt($c);
  $cards = array();
  while ($row = $stmt->fetch(PDO::FETCH_NUM))
  {
    $card = new Card;
    $col = $card->hydrate($row);
    $card->setCount(($row[$col] !== null) ? (int) $row[$col] : null);
    $cards[] = $card;
  }
  return $cards;
}

Ecco infine un esempio di utilizzo:

1
$cards = CardPeer::doSelectGroupBy(null, CardPeer::TYPE);