<?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>IMS Blog - blog o modernom programovaní od Tibor Piňo &#187; transaction</title>
	<atom:link href="http://ims.rockretail.com/tag/transaction/feed/" rel="self" type="application/rss+xml" />
	<link>http://ims.rockretail.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Thu, 18 Feb 2010 10:11:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Viacnásobný insert do databázy</title>
		<link>http://ims.rockretail.com/2009/01/23/viacnasobny-insert-do-databazy/</link>
		<comments>http://ims.rockretail.com/2009/01/23/viacnasobny-insert-do-databazy/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 19:48:10 +0000</pubDate>
		<dc:creator>Tibor Piňo</dc:creator>
				<category><![CDATA[Tipy a triky]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[multi insert]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[save]]></category>
		<category><![CDATA[transaction]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[V dnešnom článku si ukážeme, akým spôsobom môžeme do databázy vkladať veľké množstvá dát pomocou jedného save príkazu.
Určite každý z nás už riešil situáciu, kedy bolo potrebné vložiť na jedenkrát do databázy väčšie množstvo dát. Dnes si ukážeme dva spôsoby, ako takúto situáciu efektívne vyriešiť v CakePHP.
Vkladáme dáta v cykle
Prvou z možností je vkladať dáta [...]]]></description>
			<content:encoded><![CDATA[<p>V dnešnom článku si ukážeme, akým spôsobom môžeme do databázy vkladať veľké množstvá dát pomocou jedného save príkazu.<span id="more-57"></span></p>
<p>Určite každý z nás už riešil situáciu, kedy bolo potrebné vložiť na jedenkrát do databázy väčšie množstvo dát. Dnes si ukážeme dva spôsoby, ako takúto situáciu efektívne vyriešiť v CakePHP.</p>
<h2>Vkladáme dáta v cykle</h2>
<p>Prvou z možností je vkladať dáta do databázy ich postupným prechádzaním a každú položku vložiť samostatným zavolaním metódy <a href="http://api.cakephp.org/class_model.html#ebe42ae387be89985b5a35dd428f5c81">save()</a> pomocou nášho modelu. Predpokladajme, že chceme vložiť niekoľko obrázkov uložených v jednom poli. Kód by mohol vyzerať následovne</p>
<pre><code>//data to insert
$pictures = array
(
  [0] =&gt;
    [Picture] =&gt; Array
        (
            [name] =&gt; 'a.jpg'
        )
  [1] =&gt;
    [Picture] =&gt; Array
        (
            [name] =&gt; 'b.jpg'
        )
  [2]=&gt;
    [Picture] =&gt; Array
        (
            [name] =&gt; 'c.jpg'
        )
)

for($i;$i&lt;count($pictures);$i++) {
     $this-&gt;Picture-&gt;create();
     $this-&gt;Picture-&gt;save($picture[$i]);
}</code></pre>
<p>Takým spôsobom by sme dosiahli úspešné vloženie všetkých našich obrázkov z poľa <em>pictures</em>. I keď tento spôsob nespĺňa podmienky hromadného vkladania dát pomocou jedného príkazu <em>save()</em>, uvádzame ho z dôvodu, že ak by sme zabudli na zavolanie metódy <a href="http://api.cakephp.org/libs_2model_2model_8php-source.html#l00968">create()</a> pred každým volaním metódy <em>save()</em>, výsledok by bol taký, že do databázy by sa nám uložil len posledný prvok v poli <em>pictures</em>. Toto správanie je spôsobené tým, že CakePHP by pri prvom inserte vložil prvok do databázy a všetky ostatné volanie metódy <em>save()</em> by boli len update prvého vloženého záznamu. Tým by sme dospeli k záveru, že v databáze by sa nachádzal vždy iba posledný prvok z daného poľa. Preto je nevyhnutné volať metódu <em>create()</em> pred každým zavolaním metódy <em>save()</em>, ktorá nám pripraví model pre vloženie nového záznamu.</p>
<h2>Vkladáme dát jedným save príkazom</h2>
<p>Druhým spôsobom je využiť metódu <a href="http://api.cakephp.org/class_model.html#49f295217028004b5a723caf086a86b1">saveAll()</a> , ktorá príjíma ako parameter pole s viacnásobnými údajmi a dokáže ich uložiť jediným zavolaním tejto metódy. Vyššie uvedený príklad by mohol pomocou tejto metódy vyzerať následovne</p>
<pre><code>$pictures = array
(
  [0] =&gt;
    [Picture] =&gt; Array
        (
            [name] =&gt; 'a.jpg'
        )
  [1] =&gt;

    [Picture] =&gt; Array
        (
            [name] =&gt; 'b.jpg'
        )
  [2]=&gt;
    [Picture] =&gt; Array
        (
            [name] =&gt; 'c.jpg'
        )
)

$this-&gt;saveAll($pictures);</code></pre>
<p>Metóda <em>saveAll()</em> má taktiež implementované transakcie a ak potrebujeme zaručiť, že sa uložia buď všetky položky v poli, alebo v prípade chyby žiadna, musíme nastaviť parameter <em>atomic</em> na hodnotu <em>true</em></p>
<pre><code>$this-&gt;saveAll($pictures,array('atomic'=&gt;true);</code></pre>
<p>Týmto je náš článok u konca a verím, že vám tieto rady budú nápomocné.</p>
]]></content:encoded>
			<wfw:commentRss>http://ims.rockretail.com/2009/01/23/viacnasobny-insert-do-databazy/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
