<?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>Bloog.sk &#187; PHP</title>
	<atom:link href="http://www.bloog.sk/category/programovanie/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bloog.sk</link>
	<description>recenzie a kvalitné informácie z digitálneho sveta</description>
	<lastBuildDate>Sun, 26 Jun 2011 20:30:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>PHP frameworky na konferencii Zend/PHP</title>
		<link>http://www.bloog.sk/2009/11/11/php-frameworky/</link>
		<comments>http://www.bloog.sk/2009/11/11/php-frameworky/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 09:48:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.bloog.sk/?p=1001</guid>
		<description><![CDATA[Zástupcovia Agavi, CakePHP, CodeIgniter, Symfony a Zend diskutovali o svojich technológiách na konferencii Zend/PHP. Agavi predstavil David Zulke, vedúci vývojár a generálny riaditeľ poradenskej firmy Bitextender, ktorá začínala s frameworkom Mojave: &#8220;Ponúka také funkcie ako validácia a manipulácia s fontami, nemá však riešenie pre generovanie dátového modelu pre aplikácie. Vývojári môžu vziať existujúce webové aplikácie [...]]]></description>
			<content:encoded><![CDATA[<p>Zástupcovia Agavi, CakePHP, CodeIgniter, Symfony a Zend diskutovali o svojich technológiách na konferencii Zend/PHP.</p>
<p>Agavi predstavil David Zulke, vedúci vývojár a generálny riaditeľ poradenskej firmy Bitextender, ktorá začínala s frameworkom Mojave: &#8220;<em>Ponúka také funkcie ako validácia a manipulácia s fontami, nemá však riešenie pre generovanie dátového modelu pre aplikácie. Vývojári môžu vziať existujúce webové aplikácie a umiestniť na ňu vrstvu REST alebo SOAP</em>&#8220;. Zulka ďalej zdôraznil význam štruktúry pre vývoj, povedal: &#8220;<em>Myslím, že je povinnosťou frameworku, aby ponúkol štruktúru pre projekty.</em>&#8221;</p>
<p>CakePHP môžu využívať ľudia s menšími vývojárskymi skúsenosťami, tvrdí Nate Ábela, vedúci autor projektu.</p>
<p>&#8220;<em>Ak by som mal povedať nejakú zvláštnosť o CakePHP, tak je to napríklad to, že sme uspeli práve preto, že je veľmi kontextovo-priateľský</em>&#8220;, povedal Ábela. &#8220;<em>Vždy sme hrdý na to, že môžeme prezentovať pojmy z vyšších programovacích jazykov veľmi prístupným spôsobom.</em>&#8221;</p>
<p>Zástupca CodeIgniter:</p>
<p>&#8220;<em>Podľa mňa CodeIgniter je niečo, s čím sa veľmi jednoducho pracuje</em>&#8220;, povedal Ed Finkler, webový vývojár a bezpečnostný výskumný pracovník na Purdue University. CodeIgniter poskytuje pekný základ, ktorý je možné ľahko nasadiť, a vďaka dynamickému načítavaniu je veľmi rýchly. CodeIgniter, však nemusí byť tou najlepšou voľbou pre vývoj rozsiahlych a zložitých aplikácií. Je vhodnejší pre malé a stredne veľké projekty.</p>
<p>Framework Symfony, ktorý vyvinula francúzska spoločnosť sa pýši svojimi bezpečnostnými funkciami, tvrdí Fabien Potencier, vedúci vývojár Symfony a generálny riaditeľ spoločnosti Sensio, ktorá sa zaoberá vývojom webových riešení a open source technológiami.</p>
<p>&#8220;<em>Ak máte radi francúzske jedlo, ak máte radi francúzske víno, myslím, že určite budete mat radi Symfony</em>,&#8221; povedal Potencier. &#8220;<em>Kladieme silný dôraz na bezpečnosť. Snažíme sa o čo najväčšiu bezpečnosť už v predvolenom nastavení</em>&#8220;, povedal s tým, že ochrana je ponúkaná proti problémom cross-site scripting.</p>
<p>&#8220;<em>Symfony sa používa k tvorbe najväčších webových portálov na svete, ako je napríklad Yahoo</em>&#8220;, uviedol Potencier.</p>
<p>Zend Framework sa líši od ostatných, pretože vývojári nemusia používať MVC, tvrdí Matthew Weier O&#8217;Phinney, vedúci projektu pre Zend Framework. &#8220;<em>Kladieme dôraz na Unit testing, a dokumentáciu kódu</em>&#8220;.</p>
<p>O&#8217;Phinney ďalej povedal: &#8220;<em>Zend Framework vstupuje do hry pri použití iných frameworkov. Myslíme si, že po Zende siahnu programátori hlavne vtedy, ak majú v pláne používať aj iné knižnice</em>&#8220;.</p>
<p>Zástupcovia tiež prezradili ako a či podporia PHP 5.3, ktoré pridáva funkcie ako menové priestory na zlepšenie organizácie kódu a pod..</p>
<p>Spoločnosť Zend Technologies, ktorá vyvíja Zend Framework, zahrnie podporu pre PHP 5.3 už v plánovanej verzii Zend Framework 2.0. Podľa Zend CEO Andi Gutmans by už mohla vyjsť na konci budúceho roka. </p>
<p>Kompletný prepis CakePHP do PHP 5.3 sa začal pred rokom. &#8220;<em>Použijeme všetky tieto spoločné menové konvencie a sme vlastne prví, kto ich ich implementuje</em>&#8220;, povedal Ábela. </p>
<p>Symfony 2.0 nebude podporovať PHP 5.3. &#8220;<em>Symfony používa veľa veľkých spoločností, a mnoho z nich si nemôže dovoliť vykonať upgrade na najnovšiu verziu PHP</em>&#8220;, tvrdí naopak Potencier.</p>
<p>&#8220;<em>Bude trvať ešte veľa času kým prejdeme na PHP 5.3</em>,&#8221; povedal Potencier. </p>
<p>Zulka ale nesúhlasil s prístupom Symfony. &#8220;<em>PHP 5.3 je v prvom rade veľký míľnik. Dáva skutočný prínos, a myslím, že miera prijatia bude oveľa vyššia, ako u 5.2 a 5.1.</em>&#8220;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bloog.sk/2009/11/11/php-frameworky/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Doctrine (ORM pre PHP)</title>
		<link>http://www.bloog.sk/2009/10/25/doctrine-orm-pre-php/</link>
		<comments>http://www.bloog.sk/2009/10/25/doctrine-orm-pre-php/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 18:07:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.bloog.sk/?p=910</guid>
		<description><![CDATA[Doctrine (Doktrína) je objektovo relačný mapper (ORM) pre PHP 5.2.3+, ktorá je umiestnená na databázovej vrstve (DBAL). Jedným z jej hlavných funkcií je možnosť písať databázové dotazy pomocou vlastného objektovo orientovaného SQL dialektu tzv. Doctrine Query Language (DQL), inšpirovaný známym Hibernate HQL. To poskytuje vývojárom výkonnú alternatívu k SQL, ktorá udržiava pružnosť, bez nutnosti zbytočných [...]]]></description>
			<content:encoded><![CDATA[<p>Doctrine (Doktrína) je objektovo relačný mapper (ORM) pre PHP 5.2.3+, ktorá je umiestnená na databázovej vrstve (DBAL). Jedným z jej hlavných funkcií je možnosť písať databázové dotazy pomocou vlastného objektovo orientovaného SQL dialektu tzv. Doctrine Query Language (DQL), inšpirovaný známym Hibernate HQL. To poskytuje vývojárom výkonnú alternatívu k SQL, ktorá udržiava pružnosť, bez nutnosti zbytočných duplicít kódu.</p>
<h3>Čo je vlastne ORM?</h3>
<p>Objektovo relačné mapovanie (ORM) je technika používaná v programovacích jazykoch, ktorá rieši rôzne nekompatibilné typy dát v relačných databázach. To v podstate umožňuje, aby sme mali &#8220;virtuálnu objektovú databázu&#8221;, ktorá môže byť použitá z daného programovacieho jazyka. Existuje veľa voľných i komerčných balíkov, ktoré to ponúkajú a niektorí vývojári sa rozhodli si vytvoriť vlastné ORM.</p>
<h3>Inštalácia doktríny</h3>
<p>Inštalácia doktríny cez SVN je veľmi jednoduchá. V podstate nejde o inštaláciu ale o jednoduché stiahnutie. Stačí si teda stiahnuť akúkoľvek verziu doktríny z SVN servera: http://svn.doctrine-project.org </p>
<p>Ak chcete vyskúšať konkrétnu verziu, môžete použiť nasledujúci príkaz z terminálu:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">svn</span> <span style="color: #c20cb9; font-weight: bold;">co</span> http:<span style="color: #000000; font-weight: bold;">//</span>svn.doctrine-project.org<span style="color: #000000; font-weight: bold;">/</span>branches<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">1.2</span> .</pre></div></div>

<h3>Implementácia / inicializácia</h3>
<p>Najskôr je samozrejme nutné si v php doktrínu includnúť &#8211; nastaviť cesty pomocou funkcie <em>set_include_path()</em>. Includuje sa nadradený adresár adresáru Doctrine (mám na mysli adresár 1.2/lib/Doctrine/). Napríklad:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">/* V adresari $appFolder/library/ sa nachadza adresar Doctrine a subor Doctrine.php */</span>
<span style="color: #990000;">set_include_path</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">get_include_path</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
  <span style="color: #339933;">.</span>PATH_SEPARATOR <span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$appFolder</span>/library/&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>No a potom je potrebne doktrínu inicializovať. Predovšetkým je potrebné knižnici povedať kam sa budeme napájať. Napríklad:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$manager</span> <span style="color: #339933;">=</span> Doctrine_Manager<span style="color: #339933;">::</span><span style="color: #004000;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$manager</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setAttribute</span><span style="color: #009900;">&#40;</span>Doctrine<span style="color: #339933;">::</span><span style="color: #004000;">ATTR_MODEL_LOADING</span><span style="color: #339933;">,</span> Doctrine<span style="color: #339933;">::</span><span style="color: #004000;">MODEL_LOADING_CONSERVATIVE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$manager</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setAttribute</span><span style="color: #009900;">&#40;</span>Doctrine<span style="color: #339933;">::</span><span style="color: #004000;">ATTR_AUTO_FREE_QUERY_OBJECTS</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* tvorba pripojenia do db */</span>
<span style="color: #000088;">$connection</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$manager</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">connection</span><span style="color: #009900;">&#40;</span>
  <span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">databaze</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">stroj</span> <span style="color: #339933;">.</span><span style="color: #0000ff;">'://'</span>
  <span style="color: #339933;">.</span><span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">databaze</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">username</span> <span style="color: #339933;">.</span><span style="color: #0000ff;">':'</span>
  <span style="color: #339933;">.</span><span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">databaze</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">password</span>  <span style="color: #339933;">.</span><span style="color: #0000ff;">'@'</span>
  <span style="color: #339933;">.</span><span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">databaze</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">host</span> <span style="color: #339933;">.</span><span style="color: #0000ff;">'/'</span>
  <span style="color: #339933;">.</span><span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">databaze</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">dbname</span><span style="color: #339933;">,</span>
  <span style="color: #0000ff;">'doctrine'</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$connection</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setCharset</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'utf8'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$connection</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setAttribute</span><span style="color: #009900;">&#40;</span>Doctrine<span style="color: #339933;">::</span><span style="color: #004000;">ATTR_QUOTE_IDENTIFIER</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$connection</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setAttribute</span><span style="color: #009900;">&#40;</span>Doctrine<span style="color: #339933;">::</span><span style="color: #004000;">ATTR_VALIDATE</span><span style="color: #339933;">,</span> Doctrine<span style="color: #339933;">::</span><span style="color: #004000;">VALIDATE_ALL</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$connection</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setAttribute</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'portability'</span><span style="color: #339933;">,</span> Doctrine<span style="color: #339933;">::</span><span style="color: #004000;">PORTABILITY_ALL</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$connection</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getDbh</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setAttribute</span><span style="color: #009900;">&#40;</span>PDO<span style="color: #339933;">::</span><span style="color: #004000;">MYSQL_ATTR_USE_BUFFERED_QUERY</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h4>Vytvorenie modelov</h4>
<p>Aby ste mohli s databázou v doktríne pracovať ostáva nám urobiť ďalší dôležitý krok. Ako to už bolo spomenuté v odseku ORM, doktrína je vlastne vrstva ktorá robí program nezávislý od konkrétneho databázového stroja. Je jedno teda, či je to Postgresql, MySQL či Oracle. Je teda potrebné vytvoriť akúsi reprezentáciu databázy. No a v doktríne s databázou manipulujem prostredníctvom modelov &#8211; tried, odvodené od <em>Doctrine_Record</em>. Aby sme tieto modely nemuseli vytvárať ručne, Doctrine nám ponúka metódu, ktorá nám ich vygeneruje automaticky z databázy. Samozrejme odporúčam si tieto modely následne upraviť a skrášliť a napríklad namiesto <em>uzivatelSkupinaId</em> používať <em>skupina_uzivatela_id</em> a pod. A teraz samotný kód pre vygenerovanie modelov:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">Doctrine<span style="color: #339933;">::</span><span style="color: #004000;">generateModelsFromDb</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'models'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'doctrine'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'generateTableClasses'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Metóda GenerateModelsFromDb vyžaduje len jeden parameter, a to je importný adresár (adresár, kde budú uložené vygenerované súbory). Druhým argumentom je pole mien databázových spojení pre ktoré sa vytvoria modely, a tretím argumentom sú jednotlivé predvoľby pre tvorbu modelov.<br />
A teraz ukážka modelu užívateľa:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">abstract <span style="color: #000000; font-weight: bold;">class</span> BaseUzivatel <span style="color: #000000; font-weight: bold;">extends</span> Doctrine_Record
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> setTableDefinition<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setTableName</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'tbl_Uzivatel'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasColumn</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'uzivatelId as id'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'integer'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">6</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;">'integer'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'primary'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'autoincrement'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'length'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'6'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasColumn</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'uzivatelMeno as uzivatelske_meno'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'string'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">32</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;">'string'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'default'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'notnull'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'notblank'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'length'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'32'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasColumn</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'uzivatelHeslo as heslo'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'string'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">255</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;">'string'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'default'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'notnull'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'notblank'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'length'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'255'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasColumn</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'uzivatelSkupinaId as skupina_uzivatela_id'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'integer'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">5</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;">'integer'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'default'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'notnull'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'length'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'5'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasColumn</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'uzivatelZmazany as zmazany'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'tinyint'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</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;">'tinyint'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'default'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'0'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'notnull'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'length'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'1'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasColumn</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'rolaId as rola_id'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'integer'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</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;">'integer'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'default'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'1'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'notnull'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'length'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'2'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">class</span> Uzivatel <span style="color: #000000; font-weight: bold;">extends</span> BaseUzivatel
<span style="color: #009900;">&#123;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>Použitie</h3>
<p>No a teraz poďme k nejakému príkladu. Budeme pritom pužívať vyššie uvedený model <em>Uzivatel</em></p>
<h4>Hľadám užívateľa (SELECT)</h4>
<p>Jendoducho chceme nájsť užívateľa podľa jeho mena. A tu je kód:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$uzivatelia</span> <span style="color: #339933;">=</span> Doctrine_Query<span style="color: #339933;">::</span><span style="color: #004000;">create</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
     <span style="color: #339933;">-&gt;</span><span style="color: #004000;">from</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Uzivatel'</span><span style="color: #009900;">&#41;</span>
     <span style="color: #339933;">-&gt;</span><span style="color: #004000;">where</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'uzivatelske_jmeno = ?'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$uzivatelske_jmeno</span><span style="color: #009900;">&#41;</span>
     <span style="color: #339933;">-&gt;</span><span style="color: #004000;">execute</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$uzivatelia</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$uzivatel</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$uzivatel</span> instanceof Uzivatel<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
          <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Nasli sme uzivatela s menom '</span><span style="color: #339933;">.</span><span style="color: #000088;">$uzivatel</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">uzivatelske_meno</span><span style="color: #339933;">;</span>
     <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Jednoduché a prehľadné však? Lenže ono to ide ešte jednoduchšie (!):</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">/* Tento kod vrati prveho najdeneho uzivatela s danym menom */</span>
<span style="color: #000088;">$uzivatel</span> <span style="color: #339933;">=</span> Doctrine<span style="color: #339933;">::</span><span style="color: #004000;">getTable</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Uzivatel'</span><span style="color: #009900;">&#41;</span>
     <span style="color: #339933;">-&gt;</span><span style="color: #004000;">findByuzivatelske_jmeno</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$uzivatelske_jmeno</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     <span style="color: #339933;">-&gt;</span><span style="color: #004000;">getFirst</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h4>Vytvorenie nového užívateľa (INSERT)</h4>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$uzivatel</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Uzivatel<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$uzivatel</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">uzivatelske_meno</span>    <span style="color: #339933;">=</span> <span style="color: #000088;">$uzivatelske_meno</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$uzivatel</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">heslo</span>                <span style="color: #339933;">=</span> <span style="color: #000088;">$heslo</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$uzivatel</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">skupina_uzivatela_id</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">8</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$uzivatel</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">rola_id</span>              <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$uzivatel</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">save</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.bloog.sk/2009/10/25/doctrine-orm-pre-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using memcached
Page Caching using memcached (user agent is rejected)
Database Caching 11/23 queries in 0.007 seconds using memcached
Object Caching 310/319 objects using memcached
Content Delivery Network via N/A

Served from: www.bloog.sk @ 2012-02-08 22:08:06 -->
