<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PHPBlog.it &#187; ORM</title>
	<atom:link href="http://phpblog.it/tag/orm/feed/" rel="self" type="application/rss+xml" />
	<link>http://phpblog.it</link>
	<description>Solo un altro blog targato WordPress</description>
	<lastBuildDate>Mon, 30 Jan 2012 10:36:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Propel: AND e OR</title>
		<link>http://phpblog.it/2008/11/05/propel-and-e-or/</link>
		<comments>http://phpblog.it/2008/11/05/propel-and-e-or/#comments</comments>
		<pubDate>Wed, 05 Nov 2008 05:00:32 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[phpblog]]></category>
		<category><![CDATA[and]]></category>
		<category><![CDATA[or]]></category>
		<category><![CDATA[ORM]]></category>
		<category><![CDATA[propel]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://phpblog.it/2008/11/05/propel-and-e-or/</guid>
		<description><![CDATA[Le condizioni multiple per una colonna utilizzando Propel come ORM non sono proprio immediate. Lavorando con symfony, che usa proprio Propel, mi sono avvicinato all&#8217;orm grazie al libro relativo al framework di sviluppo per PHP5. Chiaramente le nozioni riportate sono relative agli esempi presi in esame di volta in volta e coprono le funzioni principali [...]]]></description>
			<content:encoded><![CDATA[<p>Le <strong>condizioni multiple per una colonna</strong> utilizzando <a href="http://propel.phpdb.org/trac/" title="Propel"><strong>Propel come ORM</strong></a> non sono proprio immediate. Lavorando con symfony, che usa proprio Propel, mi sono avvicinato all&#8217;orm grazie al <a href="http://www.symfony-project.org/book/1_1/08-Inside-the-Model-Layer" title="symfony model layer">libro relativo al framework</a> di sviluppo per PHP5. Chiaramente le nozioni riportate sono relative agli esempi presi in esame di volta in volta e coprono le funzioni principali senza, giustamente, andare troppo nei particolari (da ricercare nella documentazione di Propel). Questo ha fatto sì che mi imbattessi nel problema di applicare condizioni multiple in una query per una stessa colonna.</p>
<p><span id="more-190"></span> Usiamo un semplice esempio per mostrare la strada sbagliata, che potrebbe sembrare la più logica non conoscendo Propel, e quella giusta. Ipotizziamo di avere una semplice tabella con due soli campi: &#8220;nome&#8221; e &#8220;numero&#8221;. Da questa tabella vogliamo estrarre solo i record che hanno un valore di &#8220;numero&#8221; compreso tra 11 e 20 (con estremi esclusi).</p>
<p><code>SELECT *<br />
FROM table<br />
WHERE numero &gt; 11 AND numero &lt; 20</code></p>
<p>La <strong>traduzione errata,</strong> più istintiva, è qualcosa di simile alla seguente:</p>
<p><code>$c = new Criteria();<br />
$c-&gt;add(TablePeer::NUMERO, 11, Criteria::GREATER_THAN);<br />
$c-&gt;add(TablePeer::NUMERO, 20, Criteria::LESS_THAN);<br />
...</code></p>
<p>dove si pensa che ogni <em>add</em> vada ad aggiungere una condizione conbinandola alle altre con un AND. <strong>Tutto questo però è sbagliato visto che aggiungendo in questo modo più condizioni sulla stessa colonna &#8220;sovrascrive&#8221; le precedenti e lascia utilizzata solo l&#8217;ultima.</strong> L&#8217; equivalente di:</p>
<p><code>SELECT *<br />
FROM table<br />
WHERE numero &lt; 20</code></p>
<p>che di sicuro non è quello che vogliamo. <strong>Come fare allora? </strong>Bisogna ricorrere all&#8217;utilizzo degli <a href="http://propel.phpdb.org/docs/user_guide/chapters/FindingObjects.html" title="Criterion objects">oggetti di tipo Criterion</a> usando il metodo Criterion::addAnd():</p>
<p><code>$c = new Criteria();<br />
$criterion = $c-&gt;getNewCriterion(TablePeer::NUMERO, 11, Criteria::GREATER_THAN);<br />
$criterion-&gt;addAnd($c-&gt;getNewCriterion(TablePeer::NUMERO, 20, Criteria::LESS_THAN));<br />
$c-&gt;add($criterion);<br />
...</code></p>
<p>In questo modo le due condizioni verranno prese in considerazione allo stesso modo e collegate con un AND. <strong>Abbiamo ottenuto l&#8217;interpretazione corretta.</strong> Per lavorare con l&#8217;OR basta cambiare il metodo utilizzato da <code>$criterion-&gt;addAnd</code> a <code>$criterion-&gt;addOr.</code></p>
]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2008/11/05/propel-and-e-or/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Un semplice ORM in PHP: introduzione</title>
		<link>http://phpblog.it/2008/03/18/un-semplice-orm-in-php-introduzione/</link>
		<comments>http://phpblog.it/2008/03/18/un-semplice-orm-in-php-introduzione/#comments</comments>
		<pubDate>Tue, 18 Mar 2008 06:00:27 +0000</pubDate>
		<dc:creator>Davide Borsatto</dc:creator>
				<category><![CDATA[phpblog]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[ORM]]></category>

		<guid isPermaLink="false">http://php5blog.it/2008/03/18/un-semplice-orm-in-php-introduzione/</guid>
		<description><![CDATA[Con oggi iniziamo un nuovo argomento, destinato a accompagnarci per un bel pò sulle pagine virtuali di questo blog: la realizzazione di un ORM (Object Relational Mapping) per PHP5. Scopo dell&#8217;articolo odierno è di fornire un&#8217;introduzione teorica all&#8217;argomento che affronteremo in questa serie di post. Prima di tutto, cosa si intende con ORM: Un ORM [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/deia/382637881/sizes/l/"><img src="http://farm1.static.flickr.com/146/382637881_0902bd880f.jpg" border="0" height="297" width="470" /></a></p>
<p>Con oggi iniziamo un nuovo argomento, destinato a accompagnarci per un bel pò sulle pagine virtuali di questo blog: la realizzazione di un <strong>ORM</strong> (<em>Object Relational Mapping</em>) per PHP5.</p>
<p><span id="more-66"></span>Scopo dell&#8217;articolo odierno è di fornire un&#8217;introduzione teorica all&#8217;argomento che affronteremo in questa serie di post.</p>
<p>Prima di tutto, cosa si intende con ORM: Un ORM è un componente che detto in maniera semplicistica fa da filtro tra il programma vero e proprio ed i dati del database. Si occupa della manipolazione delle tuple del DB, astraendo i comandi e evitando al programmatore di dover andare ad accedere direttamente ai dati. Se utilizzate un ORM in pratica vedrete spesso scritte come queste</p>
<p><code>$comment-&gt;getID();</code></p>
<p><code>$post-&gt;getAuthor()-&gt;getName();</code></p>
<p>e molto meno come queste</p>
<p><code>$result = mysql_query("select id from comments");</code></p>
<p><code>$result = mysql_query("select name from posts inner join authors on posts.author_id = author.id");</code></p>
<p>A me sembra più comodo e pratico, credo anche a voi.</p>
<p>L&#8217;immagine in cima al post (cliccateci per l&#8217;originale più grande e leggibile) spiega com&#8217;è implementato tutto ciò nel framework <a href="http://www.symfony-project.org">symfony</a>: Propel (un ottimo ORM, forse un pò prolisso nella sintassi) si appoggia su Creole (lo strato che fisicamente si collega al DB, fa le query ecc.) e rende trasparente l&#8217;accesso al database da parte del programmatore.</p>
<p>Per semplicità io includerò tutto in un unico componente, realizzato in classi e sfruttando le capacità di PHP5. Chiedo ai lettori di correggermi nel caso troviate degli errori (sono umano anch&#8217;io, e l&#8217;ORM lo realizzo man mano che scrivo gli articoli) e di darmi consigli, saranno tutti bene accetti.</p>
<p>Ho deciso che l&#8217;ORM utilizzerà solo MySQL, in quanto sinceramente ho poca esperienza con altri tipi di RDBMS, e essendo un prodotto &#8220;artigianale&#8221; non ha molto senso andare a sbattere la testa con problemi di scelta del gestore dati. Realizzerò il componente in modo tale sia più semplice possibile andare a sopperire a questa mancanza, magari aggiungendo un singolo file con le istruzioni necessarie.</p>
<p>Rimando alla <a href="http://it.wikipedia.org/wiki/Object-relational_mapping">voce</a> di wikipedia (o alla più completa <a href="http://en.wikipedia.org/wiki/Object-relational_mapping">versione</a> in inglese) per ulteriori delucidazioni sulla parte teorica.</p>
<p>Nel prossimo articolo (online presumibilmente tra pochi giorni) inizieremo a vedere la struttura vera e propria del componente, la gerarchia dei file e concluderemo la parte teorica.</p>
]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2008/03/18/un-semplice-orm-in-php-introduzione/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

