<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum CakePHP.org.pl - FindAll - oddzielna tabela]]></title>
	<link rel="self" href="http://forum.cakephp.org.pl/feed/atom/topic/43/"/>
	<updated>2009-03-24T23:21:40Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.cakephp.org.pl/topic/43/findall-oddzielna-tabela/</id>
		<entry>
			<title type="html"><![CDATA[Odp: FindAll - oddzielna tabela]]></title>
			<link rel="alternate" href="http://forum.cakephp.org.pl/post/231/#p231"/>
			<content type="html"><![CDATA[<div class="quotebox"><cite>maciek napisał/a:</cite><blockquote><p>Co do enum - jest ładne, ale wolne. Spytajcie się dowolnego bazodanowca co będzie szybciej działało, a każdy wam powie że atrybuty typu całkowitego najlepiej nadają się do tworzenia kluczy ( i ich indeksowania) .<br />Przy min. 100tys. unikalnych wejść na stronę w ciągu dnia, nawet takie wydawało by się niewielkie rzeczy naprawdę mają znacznie.</p></blockquote></div><p>Mciek, skąd takie info, jeśli mogę zapytać,&nbsp; we wszytskich implementacjach pól enum, lista wartości pola jest przechowywana w nagłówku tabeli, fizycznie w rekordzie masz index odpowiadający danej wartości czyli smallint ( na dysku zajmuje trochę więcej miejsca niż tinyint, ale nie ma to praktycznie żadnego znaczenia)&nbsp; źródło : <a href="http://dev.mysql.com/doc/refman/5.1/en/enum.html.">http://dev.mysql.com/doc/refman/5.1/en/enum.html.</a></p><p>Czy ja pisałem gdzieś o tym, że enum ma być kluczem obcym/głównym ?</p><p>ORM ma swoje wady i zalety, wiele zpytań - zgadza się, ale są to małe zapytania łatwe do cachow&#039;ania (większość jest cachowana przez samą bazę), które zajmują mało czasu i nie obciążają serwera. Cóż nie wszytsko da się załatwić jednum $this-&gt;find(...);</p><p>Pozatym w kłejku mamy ORM tylko z nazwy <img src="http://forum.cakephp.org.pl/img/smilies/wink.png" width="15" height="15" alt="wink" /> </p><br /><p>Nie bardzo skumałem co miałeś na myśli z widokami, tworząc widok, możesz stworzyć do niego model i będzie działać jak każda normalna tabela (z małymi wyjątkami).</p>]]></content>
			<author>
				<name><![CDATA[robal77]]></name>
				<uri>http://forum.cakephp.org.pl/user/143/</uri>
			</author>
			<updated>2009-03-24T23:21:40Z</updated>
			<id>http://forum.cakephp.org.pl/post/231/#p231</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: FindAll - oddzielna tabela]]></title>
			<link rel="alternate" href="http://forum.cakephp.org.pl/post/230/#p230"/>
			<content type="html"><![CDATA[<div class="quotebox"><cite>robal77 napisał/a:</cite><blockquote><p>No właśnie.... to że&nbsp; pomiędzy tabelami występują relacje, nie znaczy że musisz hardcodować wszelkie możliwe asocjacje w modelach. 90% asocacji powinno być zbindowanych w locie, zależnie od potrzeb, wtedy wszytsko jest ok.</p></blockquote></div><p>A kto powiedział, że nie stosuje bindowania w locie?<br />Miałem sporo przypadków, kiedy klienci wymagali stworzenia raportu, dla którego poziom skomplikowania powodował że jego skuteczne przeniesienie na ORM&#039;a było niemożliwe. <br />Do prostych rzeczy - nadaje się idealnie, przy bardziej zaawansowanych - wysiada. Można tworzyć widoki, ale przecież nie o to w tym wszystkim chodzi...</p><p>Poza tym ilość zapytań jakie generuje Cake przy nawet niewielkim rekursywnym zagłębieniu modeli jest zatrważająca. </p><p>Co do enum - jest ładne, ale wolne. Spytajcie się dowolnego bazodanowca co będzie szybciej działało, a każdy wam powie że atrybuty typu całkowitego najlepiej nadają się do tworzenia kluczy ( i ich indeksowania) .<br />Przy min. 100tys. unikalnych wejść na stronę w ciągu dnia, nawet takie wydawało by się niewielkie rzeczy naprawdę mają znacznie.</p>]]></content>
			<author>
				<name><![CDATA[maciek]]></name>
				<uri>http://forum.cakephp.org.pl/user/6/</uri>
			</author>
			<updated>2009-03-24T22:27:07Z</updated>
			<id>http://forum.cakephp.org.pl/post/230/#p230</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: FindAll - oddzielna tabela]]></title>
			<link rel="alternate" href="http://forum.cakephp.org.pl/post/225/#p225"/>
			<content type="html"><![CDATA[<p>Fakt moze byc - 100% racji. </p><p>Osobiscie dziwi mnie ze ENUMy nie sa podstawowym typem danych gdyz w jezykach programowania sa bardzo szeroko stosowane i mega czytelne (wspomniane Y,N zamiast 1,0).</p>]]></content>
			<author>
				<name><![CDATA[duke_piotr]]></name>
				<uri>http://forum.cakephp.org.pl/user/31/</uri>
			</author>
			<updated>2009-03-24T09:01:32Z</updated>
			<id>http://forum.cakephp.org.pl/post/225/#p225</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: FindAll - oddzielna tabela]]></title>
			<link rel="alternate" href="http://forum.cakephp.org.pl/post/224/#p224"/>
			<content type="html"><![CDATA[<p>Kto powiedział że pole enum nie może być indexem, wręcz przeciwnie. Każde pole, które jest kluczem obcym powinno być również indexem (ale w momęcie, w którym wszytskie pola są indexami trzeba się podrpać po głowie i zastanowić) - bd wtedy minimalnie szybciej sortuje sobie wyniki. </p><p>Wg mnie jeżeli coś istenieje to powinno się to stosować (z rozwagą oczywiście).</p>]]></content>
			<author>
				<name><![CDATA[robal77]]></name>
				<uri>http://forum.cakephp.org.pl/user/143/</uri>
			</author>
			<updated>2009-03-23T19:01:56Z</updated>
			<id>http://forum.cakephp.org.pl/post/224/#p224</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: FindAll - oddzielna tabela]]></title>
			<link rel="alternate" href="http://forum.cakephp.org.pl/post/223/#p223"/>
			<content type="html"><![CDATA[<p>Hmm ciekawe rozwiazanie, zastosuje i sie przyjrzę.<br />Co do enum to nie powiedzialem ze bym unikal tylko ze w tym przypadku bym unikna/zamienil to pole na tablice z kluczami. Nie jestem wielkim guru SQL - raczej samoukiem i z tego co mi wiadomo to szukanie po kluczach jest szybsza metoda niz po tekscie (jakim wydaje mi sie byc enum). </p><p>Co do pola ENUM to nie wiem czemu nie jest to podstawowe pole w SQL, gdyz uwazam je za mega przydatne i sam go uzywam na kazdym kroku (choc ostatnio staram sie to eliminowac po tym jak dowiedzialem sie wlasnie o tej niezgodnosci, i tam gdzie moge czyli pola Y,N zastepowac 0,1)</p>]]></content>
			<author>
				<name><![CDATA[duke_piotr]]></name>
				<uri>http://forum.cakephp.org.pl/user/31/</uri>
			</author>
			<updated>2009-03-23T18:52:13Z</updated>
			<id>http://forum.cakephp.org.pl/post/223/#p223</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: FindAll - oddzielna tabela]]></title>
			<link rel="alternate" href="http://forum.cakephp.org.pl/post/221/#p221"/>
			<content type="html"><![CDATA[<p>@duke ... zacytowany kawałek mojej wypowiedzi był kierowany do zdaje się usera &quot;maciek&quot;.&nbsp; Poztaym pislem odwzorowaniu relacji w asocacjach modeli.</p><p>Jezeli tej tabeli slownikowej chcesz uzywac tylko&nbsp; do pracy z jednym modelem np User ...</p><p>Pozatym, $this-&gt;query powinno byc uzywane tylko w szczegolnych przypadkach... (pisales mi w jednym poscie ze unikalbys stosowania pola enum ze wzgledu na niezgodnosci w skladni sqla pomiedzy bazami ... a cale zapytania to juz mozna ? <img src="http://forum.cakephp.org.pl/img/smilies/big_smile.png" width="15" height="15" alt="big_smile" /> ) .. i do debugowania <img src="http://forum.cakephp.org.pl/img/smilies/wink.png" width="15" height="15" alt="wink" /></p><br /><div class="codebox"><pre><code>&lt;?php 
class User extends AppModel { }
// w tym samym pliku 

class Slownik extends AppModel  { // yeap konwencje kejka zezwalaja na umieszczanie kilku klas (np modeli) w tym samym pliku ;)
}</code></pre></div><p>w przecywinym wypadku musisz uzyc kompozycji ( czyli poprostu zaladowac rejestrem zewnetrzny model).</p><p>Ja mam w AppModel teaka metode ....</p><div class="codebox"><pre><code>    function getModelObject($modelName) {
        if(!$model = ClassRegistry::getObject($modelName)): // unikamy ladowania tego samogo modelu wielokrotnie
            $model = ClassRegistry::init($modelName,&quot;Model&quot;); // jednak model nie byl zaladowany wczesniej, no to zaladowac gada
            ClassRegistry::addObject($modelName,$model);    // wpychamy model do rejestru
        endif;                
        return $model;
    }


// i sposb uzycia :

$Slownik = $this-&gt;getModelObject(&quot;Slownik&#039;);</code></pre></div>]]></content>
			<author>
				<name><![CDATA[robal77]]></name>
				<uri>http://forum.cakephp.org.pl/user/143/</uri>
			</author>
			<updated>2009-03-23T14:52:49Z</updated>
			<id>http://forum.cakephp.org.pl/post/221/#p221</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: FindAll - oddzielna tabela]]></title>
			<link rel="alternate" href="http://forum.cakephp.org.pl/post/219/#p219"/>
			<content type="html"><![CDATA[<div class="quotebox"><cite>robal77 napisał/a:</cite><blockquote><p>Od wersji 1.2 nie ma asocjacji której byś nie utworzył, no może jest kilka specyficznych wyjątków, ale i w takich przypadkach da sie obejść bez custom query.</p></blockquote></div><p>Moglbys rozwinac/podac przyklady ??</p><p>Czyli wg ciebie co jest najlepszym rozwiazaniem? Przypominam ze chodzi o query w modelu wyciagajacym tylko prosta tabele slownikowa.</p><p>Ja jakos jednak obstaje przy tym query w tym szczegolnym przypadku ale jezeli bylby to bardziej skomplikowany przyklad to rozwin cytowana mysl jesli mozesz;&gt; Bo jezeli modele nie sa polaczone to jak mam z nich cos wyciagac nie uncludujac ich w &#039;$uses&#039; lub przez dolaczenie klas w locie?</p>]]></content>
			<author>
				<name><![CDATA[duke_piotr]]></name>
				<uri>http://forum.cakephp.org.pl/user/31/</uri>
			</author>
			<updated>2009-03-23T14:38:22Z</updated>
			<id>http://forum.cakephp.org.pl/post/219/#p219</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: FindAll - oddzielna tabela]]></title>
			<link rel="alternate" href="http://forum.cakephp.org.pl/post/217/#p217"/>
			<content type="html"><![CDATA[<div class="quotebox"><cite>juby napisał/a:</cite><blockquote><p>sposob z ClassRegistry::init...nie jest za bardzo optymalny moim zdaniem. Wywylujac ta funcje nie dosc ze dolaczasz dodatkowe 73 linijki kodu (tyle zajmuje init <a href="http://api.cakephp.org/view_source/class-registry/#line-98">http://api.cakephp.org/view_source/clas … y/#line-98</a>) to jeszcze w dodatku zasmiecasz pamiec niepotrzebnym obiektem.</p></blockquote></div><p>To jest jaknabardziej optymalny sposób. Tworzenie kolejnych obiektow to zarowno wada jak i zaleta oop, pozatym ile taki obiekt może zająć miejsca w pamieci 1 - 2kb ?. Coś kosztem czegoś. </p><div class="quotebox"><cite>maciek napisał/a:</cite><blockquote><p>Osobiście query() używam bardzo rzadko, ale często wykorzystanie ORM&#039;a przy bardziej skomplikowanych zapytaniach zabija aplikacje, a w ciężkich przypadkach ich konstruowanie jest praktycznie niemożliwe.</p></blockquote></div><p>No właśnie.... to że&nbsp; pomiędzy tabelami występują relacje, nie znaczy że musisz hardcodować wszelkie możliwe asocjacje w modelach. 90% asocacji powinno być zbindowanych w locie, zależnie od potrzeb, wtedy wszytsko jest ok. </p><p>Od wersji 1.2 nie ma asocjacji której byś nie utworzył, no może jest kilka specyficznych wyjątków, ale i w takich przypadkach da sie obejść bez custom query.</p>]]></content>
			<author>
				<name><![CDATA[robal77]]></name>
				<uri>http://forum.cakephp.org.pl/user/143/</uri>
			</author>
			<updated>2009-03-23T12:52:43Z</updated>
			<id>http://forum.cakephp.org.pl/post/217/#p217</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: FindAll - oddzielna tabela]]></title>
			<link rel="alternate" href="http://forum.cakephp.org.pl/post/189/#p189"/>
			<content type="html"><![CDATA[<p>Wydaje mi się, że jednak lepszym rozwiązaniem jest wywoływanie metody modelu tabeli słownikowej. Przy pobieraniu danych poprzez&nbsp; inny model wzrost obciążenia będzie praktycznie niezauważalny, poza tym spokojnie można takie rzeczy trzymać w cache&#039;u i kłopot zniknie zupełnie. Natomiast plusem jest to, że struktura aplikacji pozostanie przejrzysta.<br />Osobiście query() używam bardzo rzadko, ale często wykorzystanie ORM&#039;a przy bardziej skomplikowanych zapytaniach zabija aplikacje, a w ciężkich przypadkach ich konstruowanie jest praktycznie niemożliwe.</p><p>@juby - 73 linijki to niezbyt wiele, zwłaszcza że nie wszystkie są wykorzystywane <img src="http://forum.cakephp.org.pl/img/smilies/smile.png" width="15" height="15" alt="smile" /> Poza tym po to używa się cache&#039;a, żeby te dodatkowe linijki wywoływać jak najrzadziej.</p>]]></content>
			<author>
				<name><![CDATA[maciek]]></name>
				<uri>http://forum.cakephp.org.pl/user/6/</uri>
			</author>
			<updated>2009-02-17T14:17:11Z</updated>
			<id>http://forum.cakephp.org.pl/post/189/#p189</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: FindAll - oddzielna tabela]]></title>
			<link rel="alternate" href="http://forum.cakephp.org.pl/post/185/#p185"/>
			<content type="html"><![CDATA[<p>alez ja od samego poczatku uwazam iz jezeli robi sie wszystko we framewokru jakim jest cake , trzeba korzystac najwiecej jak to mozliwe z jego dobrodziejstw, trzymac sie zasady MVC, dobrze zaplanowac strukture, baze, kontrolery, widoki, modele, elementy..itd..itd.<br />Oczywiscie uzywajac takich metod (jak np. $this-&gt;query() ..z czego trzeba korzystac jak najmniej) mozna byloby w pewnym momencie dojsc do wniosku, paradoksalnie, iz caly serwis upchnac do jednego pliku, jakim jest np. bootstrap.php <img src="http://forum.cakephp.org.pl/img/smilies/smile.png" width="15" height="15" alt="smile" /> co nie jest cakefriendly <img src="http://forum.cakephp.org.pl/img/smilies/smile.png" width="15" height="15" alt="smile" /><br />Osobiscie nie preferuje takich metod, ale jezeli na pewnym etapie realizacji serwisow, szczegolnie jezeli robi sie to po kims, lub jezeli serwis jest dosc duzy, a nie ma czasu na przebudowe, niestety trzeba uciec wlasnie do takich rozwiazan jak np. $this-&gt;query...<br />no..ale to debata na dlugie rozmowy na temat MVC oraz cakefriendly.<br />pozdrawiam serdecznie</p>]]></content>
			<author>
				<name><![CDATA[juby]]></name>
				<uri>http://forum.cakephp.org.pl/user/20/</uri>
			</author>
			<updated>2009-02-17T12:20:45Z</updated>
			<id>http://forum.cakephp.org.pl/post/185/#p185</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: FindAll - oddzielna tabela]]></title>
			<link rel="alternate" href="http://forum.cakephp.org.pl/post/184/#p184"/>
			<content type="html"><![CDATA[<p>@juby no tak - to jest niby najprostrza metoda zastanawialem sie tylko czy jest cos jeszcze bardziej cake Friendly ;] </p><p>Teraz sie tak zastanawiam czy faktycznie jest sens dodawac jakis model (loadModel) czy tez inna metode tylko poto aby wywolac jedno glupie zapytanie ze slownika. Moze i nie - chyba chcialem zabic komara z armaty ;]</p><p>Dzieki za odpowiedzi wychodzi na to ze nieraz najprostsze metody sa najlepsze heheh ;] </p><p>PS: @maciek - bindModel odpada gdyz slowniki nie maja powiazań z tabelami <img src="http://forum.cakephp.org.pl/img/smilies/smile.png" width="15" height="15" alt="smile" /></p><p>PS2: Dzieki za odpowiedzi, nara ;]</p>]]></content>
			<author>
				<name><![CDATA[duke_piotr]]></name>
				<uri>http://forum.cakephp.org.pl/user/31/</uri>
			</author>
			<updated>2009-02-17T09:40:54Z</updated>
			<id>http://forum.cakephp.org.pl/post/184/#p184</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: FindAll - oddzielna tabela]]></title>
			<link rel="alternate" href="http://forum.cakephp.org.pl/post/183/#p183"/>
			<content type="html"><![CDATA[<p>sposob z ClassRegistry::init...nie jest za bardzo optymalny moim zdaniem. Wywylujac ta funcje nie dosc ze dolaczasz dodatkowe 73 linijki kodu (tyle zajmuje init <a href="http://api.cakephp.org/view_source/class-registry/#line-98">http://api.cakephp.org/view_source/clas … y/#line-98</a>) to jeszcze w dodatku zasmiecasz pamiec niepotrzebnym obiektem.<br />Moim zdaniem najlepszym rozwiazaniem (jezeli nie chcesz dodawac modelu w zmiennej $uses) jest napisanie funkcji prywatnej (z przedrostkiem &#039;_&#039;, aby nie mozna bylo jej wywolac z poziomu przegladarki) w modelu aktualnym np w pliku models/NazwaModelu.php stworzyc funkcje taka :<br /></p><div class="codebox"><pre><code>class NazwaModelu extends AppModel {
   
   ....
   ....
   ....
   function _getSlownik() {
     $data = $this-&gt;query(&#039;.....zapytanie do tabeli &#039;slowniki&#039;&#039;);
     return $data;
  }
}</code></pre></div><p>a w danym miejscu kontrollera wywolujesz ja w znany wszystkim sposob<br /></p><div class="codebox"><pre><code>//controller
$data = $this-&gt;NazwaModelu-&gt;_getSlowniki();</code></pre></div><p>mam nadzieje ze sposob bedzie dla Twoich potrzeb optymalny</p>]]></content>
			<author>
				<name><![CDATA[juby]]></name>
				<uri>http://forum.cakephp.org.pl/user/20/</uri>
			</author>
			<updated>2009-02-17T00:23:52Z</updated>
			<id>http://forum.cakephp.org.pl/post/183/#p183</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: FindAll - oddzielna tabela]]></title>
			<link rel="alternate" href="http://forum.cakephp.org.pl/post/182/#p182"/>
			<content type="html"><![CDATA[<p>Albo $this-&gt;NazwaModelu-&gt;bindModel( array( parametry&nbsp; ) ); i potem $this-&gt;NazwaModelu-&gt;NowyModel-&gt;metoda();<br />Albo bardziej przyjemne rozwiązanie - ClassRegistry::init(&#039;NowyModel&#039;)-&gt;metoda();</p>]]></content>
			<author>
				<name><![CDATA[maciek]]></name>
				<uri>http://forum.cakephp.org.pl/user/6/</uri>
			</author>
			<updated>2009-02-16T13:07:40Z</updated>
			<id>http://forum.cakephp.org.pl/post/182/#p182</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: FindAll - oddzielna tabela]]></title>
			<link rel="alternate" href="http://forum.cakephp.org.pl/post/179/#p179"/>
			<content type="html"><![CDATA[<p>Możesz w akcji użyć <a href="http://api.cakephp.org/class/controller#method-ControllerloadModel">loadModel</a></p>]]></content>
			<author>
				<name><![CDATA[nookie]]></name>
				<uri>http://forum.cakephp.org.pl/user/7/</uri>
			</author>
			<updated>2009-02-16T01:56:12Z</updated>
			<id>http://forum.cakephp.org.pl/post/179/#p179</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[FindAll - oddzielna tabela]]></title>
			<link rel="alternate" href="http://forum.cakephp.org.pl/post/170/#p170"/>
			<content type="html"><![CDATA[<p>Hej mam pytanko:<br />Jaki jest najlepszy/najprostrzy sposob na zapytanie findAll z innej, niepowiazanej w zaden sposob tabeli (np. slownik).</p><p>Obecnie moj kontroler jest dosyc mocno rozbudwany i chcialbym dolaczyc do jednej z podstron liste rozwijana ktorej wartosci beda pobierane z innej tabelki.</p><p>Czy jedyny sposob to $uses = array() ? Troche to kiszkowate bo dodawal bym ten model do kazdej uprzednio stworzonej podstrony a chcialbym tylko do jednej.</p><p>Dzieki</p>]]></content>
			<author>
				<name><![CDATA[duke_piotr]]></name>
				<uri>http://forum.cakephp.org.pl/user/31/</uri>
			</author>
			<updated>2009-02-11T15:28:58Z</updated>
			<id>http://forum.cakephp.org.pl/post/170/#p170</id>
		</entry>
</feed>

