<?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>Cauan Cabral - Geek &#187; dúvidas</title>
	<atom:link href="http://cauancabral.net/tag/duvidas/feed/" rel="self" type="application/rss+xml" />
	<link>http://cauancabral.net</link>
	<description>Geek, nerd e apaixonado por tecnologia</description>
	<lastBuildDate>Fri, 13 Aug 2010 20:45:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1-alpha</generator>
		<item>
		<title>CakePHP &#8211; dúvidas comuns #1</title>
		<link>http://cauancabral.net/2009/02/23/cakephp-duvidas-comuns-1/</link>
		<comments>http://cauancabral.net/2009/02/23/cakephp-duvidas-comuns-1/#comments</comments>
		<pubDate>Mon, 23 Feb 2009 19:47:02 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Joomla!]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[dúvidas]]></category>
		<category><![CDATA[habtm]]></category>

		<guid isPermaLink="false">http://geek.cauancabral.net/?p=105</guid>
		<description><![CDATA[Como já comentei algumas vezes, estou desenvolvendo com um framework MVC em PHP chamado CakePHP. Ele foi construído com intuíto de provar o potencial do PHP (na época em comparação ao Ruby e o Ruby on Rails). Se precisar de &#8230; <a href="http://cauancabral.net/2009/02/23/cakephp-duvidas-comuns-1/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Como já comentei algumas vezes, estou desenvolvendo com um framework <a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Model_E2_80_93view_E2_80_93controller?referer=');">MVC</a> em PHP chamado <a title="Página oficial do framework CakePHP" href="http://www.cakephp.org" onclick="pageTracker._trackPageview('/outgoing/www.cakephp.org?referer=');">CakePHP</a>. Ele foi construído com intuíto de provar o potencial do PHP (na época em comparação ao <a href="http://www.ruby-lang.org/pt/" onclick="pageTracker._trackPageview('/outgoing/www.ruby-lang.org/pt/?referer=');">Ruby</a> e o <a href="http://www.rubyonrails.pro.br/" onclick="pageTracker._trackPageview('/outgoing/www.rubyonrails.pro.br/?referer=');">Ruby on Rails</a>). Se precisar de mais informações sobre o framework sugiro leitura do seu <a title="Documentação oficial do CakePHP" href="http://book.cakephp.org" onclick="pageTracker._trackPageview('/outgoing/book.cakephp.org?referer=');">Cookbook</a> e de outros blogs a respeito.</p>
<p>Desde que descobri o CakePHP faço parte do grupo <a title="Grupo de discussão sobre CakePHP em português" href="http://groups.google.com/group/cakephp-pt/" onclick="pageTracker._trackPageview('/outgoing/groups.google.com/group/cakephp-pt/?referer=');">CakePHP Tuga</a> e ocasionalmente no canal de IRC do grupo #cakephp-pt na rede Freenode.org, e já tive a oportunidade de aprender e ajudar diversas vezes.</p>
<p>Vamos as dúvidas:</p>
<ol>
<li>Como salvar dados de um formulário que envolva um relacionamenteo de &#8220;muitos para muitos&#8221;/many-to- many ou ainda de HasAndBelongToMany (HABTM) ?</li>
</ol>
<p>Nesta dúvida temos que ter em mente que o CakePHP faz todas as ligações entre nossos modelos desde que sigamos suas convenções, caso façamos isso, não haverá dificuldades.<br />
Mas quais são essas convenções? <a title="Conveções do CakePHP" href="http://book.cakephp.org/pt/view/22/Conven%C3%A7%C3%B5es-no-CakePHP" onclick="pageTracker._trackPageview('/outgoing/book.cakephp.org/pt/view/22/Conven_C3_A7_C3_B5es-no-CakePHP?referer=');">Veja você mesmo</a>.</p>
<p>Um detalhe que não podemos esquecer é que por padrão o CakePHP está preparado para tratar suas convenções em inglês, então, se não quisermos ter de modificar as configurações padrões, temos de desenvolver em inglês. Ok?</p>
<p>Seguindo todas as conveções o que fica faltando? É preciso saber como um relacionamento HABTM se manifesta em um formulário, ou seja, como ele é apresentado. No CookBook temos um <a title="Salvando dados em um HABTM" href="http://book.cakephp.org/pt/view/85/Salvando-dados-em-tabelas-relacionadas-HABTM" onclick="pageTracker._trackPageview('/outgoing/book.cakephp.org/pt/view/85/Salvando-dados-em-tabelas-relacionadas-HABTM?referer=');">texto</a> sobre o caso. Resumindo, o que temos de ter é:</p>
<ul>
<li>Um formulário com o nome de um dos modelos envolvidos no relacionamento. Por exemplo, em um blog temos um modelo Post e outro Tags, os dois estão ligados por um HABTM, então no formulário para inserir um Post, o nome de formulário seria Post.</li>
<li>Um ou mais campos identificados com o outro modelo parte do relacionamento e sua chave. No nosso exemplo seriam um ou mais campos com o nome &#8216;Tag.Tag&#8217;.</li>
</ul>
<p>No item anterior que surge a principal dúvida: como definir o nome do meu campo? que tipo de campo usar?</p>
<p>Primeiro definimos o tipo de campo a se utilizar: normalmente utilizamos um Select box para multiplas seleções OU um conjunto de Checkbox. Qualquer que seja a escolha o restante é bem simples:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">/*
$tag é o retorno de um find('list') com os campos id e name selecionados
$tags = array( array('id' =&gt; 1, 'name' =&gt; 'tag 1'), array('id' =&gt; 2, 'name' =&gt; 'tag 2') );
&nbsp;
o índice 'multiple' só deve ser utilizado quando quiser um conjunto de checkbox
*/</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$form</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">input</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Tag.Tag'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
	<span style="color: #0000ff;">'type'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'select'</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'multiple'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'checkbox'</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'options'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$tags</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'labels'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Selecione as tags'</span>
	<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Com isso seu formulário já retornará o que é esperado pelo CakePHP e tudo que será necessário para salvar os dados do relacionamento é utilizar o método &#8216;saveAll&#8217; ao invés de &#8216;save&#8217;.</p>
<p>Ainda esta semana comentarei das dúvidas sobre validação.</p>
<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a href="http://cauancabral.net/2009/02/25/cakephp-duvidas-comuns-2/" rel="bookmark" class="crp_title">CakePHP &#8211; Dúvidas Comuns #2</a></li><li><a href="http://cauancabral.net/2008/09/21/desenvolvimento-rapido/" rel="bookmark" class="crp_title">Desenvolvimento rápido</a></li><li><a href="http://cauancabral.net/2010/04/05/dica-rapida-cakephp-1-3-link-com-prefixo/" rel="bookmark" class="crp_title">Dica Rápida &#8211; CakePHP 1.3, link com prefixo</a></li><li><a href="http://cauancabral.net/2008/02/10/validao-de-dados-em-php5-final/" rel="bookmark" class="crp_title">Valida&#231;&#227;o de dados em PHP5 &#8211; final</a></li><li><a href="http://cauancabral.net/2010/01/27/dica-rapida/" rel="bookmark" class="crp_title">Dica rápida</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2009/02/23/cakephp-duvidas-comuns-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
