<?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>Basmati Tree &#187; 2008 &#187; ottobre</title>
	<atom:link href="http://www.basmatitree.net/2008/10/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.basmatitree.net</link>
	<description>nerdish recipes for a better tomorrow</description>
	<lastBuildDate>Tue, 19 May 2009 09:31:39 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Primi passi con CodeIgniter (parte 3)</title>
		<link>http://www.basmatitree.net/2008/10/14/primi-passi-con-codeigniter-3/</link>
		<comments>http://www.basmatitree.net/2008/10/14/primi-passi-con-codeigniter-3/#comments</comments>
		<pubDate>Tue, 14 Oct 2008 09:33:44 +0000</pubDate>
		<dc:creator>Palicao</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[framework]]></category>

		<guid isPermaLink="false">http://www.basmatitree.net/?p=17</guid>
		<description><![CDATA[Il Model è la parte dell&#8217;applicazione che si occupa di gestire i dati; nella maggior parte dei casi si tratta di dati che vengono salvati su database. Il controller farà uso dei metodi disponibili nella classe model per ricevere i dati di cui ha bisogno.
Nella nostra applicazione di gestione di magazzino, possiamo immaginare di avere [...]]]></description>
			<content:encoded><![CDATA[<p>Il Model è la parte dell&#8217;applicazione che si occupa di gestire i dati; nella maggior parte dei casi si tratta di dati che vengono salvati su database. Il controller farà uso dei metodi disponibili nella classe model per ricevere i dati di cui ha bisogno.</p>
<p>Nella nostra applicazione di gestione di magazzino, possiamo immaginare di avere una tabella che cataloghi tutto il contenuto del magazzino. La tabella, molto semplicemente potrebbe essere:</p>
<pre>CREATE TABLE `oggetti` (
`id` int(11) NOT NULL auto_increment,
`nome` varchar(50) collate utf8_unicode_ci NOT NULL,
`scaffale` int(11) NOT NULL,
`quantita` int(11) NOT NULL,
UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;</pre>
<p>Il modello corrispondente, quindi, potrebbe essere:</p>
<pre>class Oggetti extends Model {
  var $nome;
  var $scaffale;
  var $quantita;

  function Oggetti () {
    parent::Model();
  }

  function mostra_tutti () {
    // estrae tutti gli elementi dal database
  }

  function mostra_scaffale ($id_scaffale) {
    // estrae gli elementi filtrandoli per scaffale
  }

  // più i soliti metodi crea, modifica, cancella,...
  function crea ($nome, $scaffale, $quantita) { }
  function modifica ($id, $nome, $scaffale, $quantita) { }
  function cancella ($id) { }
}</pre>
<p>Quindi in buona sostanza una classe che implementi i classici metodi <a href="http://it.wikipedia.org/wiki/Tavola_CRUD" target="_blank">CRUD</a> più altri metodi d&#8217;utilità.</p>
<p>Per interrogare il DB, CodeIgniter fornisce una versione del pattern <a title="Active Record su Wikipedia" href="http://en.wikipedia.org/wiki/Active_record_pattern" target="_blank">Active Record</a> che semplifica la creazione di query e ci permette di scrivere codice indipendente dal tipo di database usato (attualmente i driver disponibili sono mssql, mysql, mysqli, oci8, odbc, postgres e sqlite).</p>
<p>La classe ActiveRecord fornisce metodi per la selezione, la modifica, l&#8217;inserimento e la cancellazione di dati. Inoltre sono supportate le funzioni più comuni (sum, avg&#8230;), le join, le transazioni e molto altro.</p>
<p>A questo punto possiamo entrare più nel dettaglio delle nostre funzioni e fare qualche esempio pratico:</p>
<pre>  function mostra_tutti () {
    $out = array();
    $this-&gt;db-&gt;select('nome, scaffale, quantita');
    $this-&gt;db-&gt;order_by('nome');
    $query = $this-&gt;db-&gt;get('oggetti');
    foreach ($query-&gt;result() as $row) {
      $out[] = $row;
    }
    return $out;
  }</pre>
<p>Per semplificare la sintassi è anche possibile utilizzare il chaining dei metodi:</p>
<pre>$query = $this-&gt;db-&gt;select('nome, scaffale, quantita')
              -&gt;order_by('nome')
              -&gt;get('oggetti');</pre>
<p>Per quanto riguarda la modifica e l&#8217;inserimento invece basta passare ai metodi insert() e update() un oggetto o un array di valori. In questo caso passeremo l&#8217;oggetto $this, ma potremmo anche creare un array od un oggetto ad hoc.</p>
<pre>  function crea ($nome, $scaffale, $quantita) {
    $this-&gt;nome = $nome;
    $this-&gt;scaffale = $scaffale;
    $this-&gt;quantita = $quantita;
    $this-&gt;db-&gt;insert('oggetti', $this);
  }</pre>
<pre>
<pre> function modifica ($id, $nome, $scaffale, $quantita) {
    $this-&gt;nome = $nome;
    $this-&gt;scaffale = $scaffale;
    $this-&gt;quantita = $quantita;
    $this-&gt;db-&gt;where('id', $id);
    $this-&gt;db-&gt;update('oggetti', $this);
  }</pre>
</pre>
<p>Molto semplicemente la cancellazione sarà:</p>
<pre>  function cancella ($id) {
    $this-&gt;db-&gt;where('id', $id);
    $this-&gt;db-&gt;delete('oggetti');
  }</pre>
<p>Rimando come al solito alla guida per un ulteriore approfondimento della classe <a title="The Database Class" href="http://codeigniter.com/user_guide/database/index.html" target="_blank">Database</a> e dell&#8217;<a title="ActiveRecord" href="http://codeigniter.com/user_guide/database/active_record.html" target="_blank">ActiveRecord</a>. Inoltre consiglio di dare anche un&#8217;occhiata al meccanismo di <a title="Database Caching Class" href="http://codeigniter.com/user_guide/database/caching.html" target="_blank">Caching</a> di CodeIgniter che può alleggerire di molto il carico sul database.</p>
<p>A questo punto siamo pronti per il lato di presentazione della nostra applicazione: la view, che affronterò nella prossima lezione.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.basmatitree.net/2008/10/14/primi-passi-con-codeigniter-3/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
	</channel>
</rss>
