Usando symfony 1.2 e Doctrine 1.0 problemi con le equal nested relation

Non so se vi è mai capitato di avere a che fare con le cosiddette “equal nested relation”. Queste relazioni tra oggetti sono quelle relazioni che possono essere tradotte (per quanto riguarda il database) con un “auto join” su una stessa tabella.

Un esempio pratico lo potete trovare fra gli esempi del sito dell’ORM Doctrine : Equal Nested Relation.

In uno dei miei progetti (Symfony 1.2, Doctrine 1.0) ho dovuto usare un esempio analogo, ma invece che utenti collegati fra loro con una relazione molti a molti, dovevo collegare più ticket. Una volta messo tutto in piedi e creato le classi necessarie ho fatto qualche prova e mi è spuntato questo errore:

500 | Internal Server Error
Doctrine_Connection_Mysql_Exception SQLSTATE23000: Integrity constraint violation: 1062 Duplicate entry 'N-N' for key 1

Inizialmente ho cercato una soluzione che potesse dipendere dalle configurazioni del file schema.yml che usavo e poi soluzioni che potessero riguardare qualsiasi altra cosa. Dopo quasi due giorni a sbattere la testa su questo problema sono andato al PHPDay2009 a cui avrebbe partecipato anche Jonathan Wage, ovviamente ripromettendomi di chiedere direttamente a lui!!

Fortunatamente c’è stata occasione di parlargli e Jonathan è stato più che gentile tanto da aiutarmi e mettersi a provare a trovare una soluzione lì per lì per il mio problema. Dopo circa un’ora siamo arrivati a capire dov’era il problema. Poi a pezzi e bocconi siamo arrivati ad una soluzione nelle successive 24 ore!

La patch da utilizzare è scaricabile da qui. Ricordo che questa NON È UNA SOLUZIONE DEFINITIVA. E’ piuttosto un workaround al problema!! Un ticket relativo a questa soluzione è stato aperto qui.

Sembra che questo problema sia risolto utilizzando symfony 1.3 e doctrine 1.1, quindi aspettiamo con ansia la prossima uscita di symfony che include sfDoctinePlugin con doctrine 1.1!

Symfony 1.1 – Perché Doctrine invece di Propel

Durante l’IPC tenutosi a Francoforte la scorsa settimana ho avuto il piacere di partecipare al talk di Fabien Potencier riguardo alle novità di Symfony 1.1.

Ho deciso quindi che ne parlerò in post dedicati cercando di dare un qualche spazio di approfondimento a quelle che a mio parere sono delle novità veramente interessanti.

Per ora mi limiterò ad una piccola premessa su come il team di sviluppo ha deciso di operare per le prossime versioni di Symfony in modo da chiarire alcuni dubbi su compatibilità, orm e quant’altro.

Continue reading “Symfony 1.1 – Perché Doctrine invece di Propel”