<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://mirmodynamics.com/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Mirmo Dynamics - base de données</title>
  <link>http://mirmodynamics.com/</link>
  <atom:link href="http://mirmodynamics.com/feed/tag/base%20de%20donn%c3%a9es/rss2" rel="self" type="application/rss+xml"/>
  <description>Rien de grand ne se fit jamais sans enthousiasme.</description>
  <language>en</language>
  <pubDate>Wed, 08 Oct 2008 11:22:01 +0200</pubDate>
  <copyright>2003-2008 &amp;copy; Geoffrey Bachelet</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Aller plus loin avec Zend_Db_Table</title>
    <link>http://mirmodynamics.com/post/2006/09/07/Aller-plus-loin-avec-Zend_Db_Table</link>
    <guid isPermaLink="false">urn:md5:5e84c6163b25cc97ff6364ba37cdf72a</guid>
    <pubDate>Thu, 07 Sep 2006 23:25:00 +0200</pubDate>
    <dc:creator>Geoffrey</dc:creator>
        <category>Coding</category>
        <category>base de données</category><category>surclassage</category><category>zend framework</category>    
    <description>&lt;p&gt;Nous avons vu précédemment les &lt;a href=&quot;http://fashion.hosmoz.net/post/2006/08/30/Acces-a-la-base-de-donnees%3A-Zend_Db&quot;&gt;bases de l'utilisation du composant Zend_Db&lt;/a&gt;, qui nous permet de manipuler les tables via les actions de base &lt;acronym title=&quot;Create Read Update Delete&quot;&gt;CRUD&lt;/acronym&gt;. Malheureusement, dans la plupart des cas, les outils fournis ne suffisent pas, et le besoin de pouvoir gérer les tables de données d'une manière plus fine et surtout plus spécifique se fait sentir. C'est là qu'entre en jeu le surclassage.&lt;/p&gt;    &lt;p&gt;En effet, comme nous l'avons vu la dernière fois, utiliser &lt;code&gt;Zend_Db_Table&lt;/code&gt; se résumé, pour débuter, à un simple surclassage:&lt;/p&gt;


&lt;pre&gt;class Members extends Zend_Db_Table {

}&lt;/pre&gt;


&lt;p&gt;Cette méthode laisse le champs libre à la création de méthodes spécifiques à chaque table. Nous pouvons par exemple vouloir remplir des champs automatiquement à chaque insertion ou mise à jour, par exemple des champs &lt;code&gt;created_on&lt;/code&gt; et/ou &lt;code&gt;updated_on&lt;/code&gt;:&lt;/p&gt;


&lt;pre&gt;class Members extends Zend_Db_Table {
	public function insert(&amp;amp;$data) {
		if (!isset($data['created_on'])) {
			$data['created_on'] = date('Y-m-d H:i:s');
		}
		return parent::insert($data);
	}

	public function update(&amp;amp;$data, $where) {
		if (!isset($data['updated_on'])) {
			$data['updated_on'] = date('Y-m-d H:i:s');
		}
		return parent::update($data, $where);
	}
}&lt;/pre&gt;


&lt;p&gt;&lt;em&gt;Note&lt;/em&gt;: Dans cet exemple, vous pouvez constater que la variable &lt;code&gt;$data&lt;/code&gt; de la méthode &lt;code&gt;update&lt;/code&gt; est passée par référence. C'est tout simplement pour respecter la définition originelle des méthodes, ce qui est requis pour passer le niveau d'erreur &lt;code&gt;E_STRICT&lt;/code&gt;.&lt;/p&gt;


&lt;p&gt;Nous pouvons également redéfinir le comportement d'une action:&lt;/p&gt;


&lt;pre&gt;class Members extends Zend_Db_Table {
	public function delete($where) {
 		$data = array(
 			'status' =&amp;gt; 0,
 		);
		return $this-&amp;gt;update($data, $where);
	}
}&lt;/pre&gt;


&lt;p&gt;Il est aussi possible de définir nos propres méthodes de recherche ou d'écriture:&lt;/p&gt;


&lt;pre&gt;class Members extends Zend_Db_Table {
	public function findByMail($mail) {
		$where = $this-&amp;gt;_quoteInto('mail = ?', $mail);
		return $this-&amp;gt;fetchRow($where);
	}
	
	public function getByZipcode($zipcode) {
		$where = $this-&amp;gt;_quoteInto('zipcode = ?', $zipcode);
		return $this-&amp;gt;fetchAll($where);
	}
	
	function updateById(&amp;amp;$data, $id) {
		$where = $this-&amp;gt;_quoteInto('id = ?', $id);
		return $this-&amp;gt;update($data, $where);
	}
	
	private function _quoteInto($mask, $value) {
		return $this-&amp;gt;getAdapter()-&amp;gt;quoteInto($mask, $value);
	}
}&lt;/pre&gt;


&lt;p&gt;On notera ici la création également d'une méthode privée qui n'est qu'un raccourci pour protéger les clauses &lt;code&gt;WHERE&lt;/code&gt; contre les injections &lt;acronym&gt;SQL&lt;/acronym&gt;.&lt;/p&gt;</description>
    
    
    
          <comments>http://mirmodynamics.com/post/2006/09/07/Aller-plus-loin-avec-Zend_Db_Table#comment-form</comments>
      <wfw:comment>http://mirmodynamics.com/post/2006/09/07/Aller-plus-loin-avec-Zend_Db_Table#comment-form</wfw:comment>
      <wfw:commentRss>http://mirmodynamics.com/feed/rss2/comments/595</wfw:commentRss>
      </item>
    
</channel>
</rss>