|
[ Nikola Poša @ 07.05.2009. 19:40 ] @
| Zanima me da li je bolje, da se pri projektovanju modela u Zend Framework-u, koji se bave nekim poslovima sa tabelama u bazi, upiti formiraju kao običan string ili kao instanca klase Zend_DB_Select?
Npr. ovo:
Code:
$sql = 'SELECT foo, bar FROM foobar WHERE foo = 3';
... ili ovo:
Code:
$sql = $this->db_handler->select()
->from('foobar', array('foo', 'bar'))
->where('foo = 3');
Naravno, ovaj drugi primer je u slučaju da se model ne izvodi iz Zend_Db_Table, već da ima instancu DB adaptera ($db_handler) kao člana klase...
E sad, mene zanima šta je bolje koristiti prvenstveno zbog performansi. Meni se nekako čini da je ova druga metoda samo jedan zaobilazan način da se stigne do upita, ali naravno, ima i ona svojih prednosti (sintaksno ispravni upiti, apstakcija nezavisna od tipa baze, zaštita od SQL Injection-a automatskim quote-ovanjem identifikatora i vrednosti, itd.). Ali ono što meni smeta je to što npr. nikako nije moguće formirati ovakav upit:
Code:
$sql = 'SELECT f.id, f.name, b.test, b.polje
FROM foo f, bar b
WHERE b.foo_id = f.id AND b.polje = 3';
Tačnije, nikako nije moguće da se u FROM kaluzuli koristi dve ili više tabela, već se forsiraju spajanja (join-ovi), pa bi se upit koji daje isti takav rezultat mogao dobiti jedino ovako:
Code:
$sql = $this->db_handler->select()
->from(
array('f'=>'foo '),
array(
'f.id',
'f.name',
'b.test',
'b.id',
'p.polje',
)
)
->joinInner(array('b'=>'bar'), 'b.foo_id = f.id', null)
->where('b.polje = 3');
Neka me neko ispravi ako grešim...
Da vas čujem... 
|
[ kazil @ 07.05.2009. 20:14 ] @
Zend_Db_Table je za rad nad samo jednom tabelom, ako zelis u jednom upitu vise tabela, onda trebas ici jedan "nivo" vise, tj. da radis preko $this->db_handler. Tu ti je i odgovor: ako je upit samo za jednu tabelu, koristi Zend_Db_Table, ako ti treba JOIN, radi sa db adapterom.
:)
[ Mister_rap @ 07.05.2009. 20:15 ] @
Licno uglavnom koristim Doctrine, ali ako bih morao da biram svakako bih koristio Zend_Db_Table jer mi je prosto tako jednostavnije i preglednije eventualno za neke stvari ovakav hendler...
Mozes da uzmes u razmatranje relacije konkretno za ovaj primer.
[ Nikola Poša @ 07.05.2009. 20:37 ] @
Naravno, ali moje glavno pitanje je vezano za formiranje upita: string ili Zend_DB_Select? Nisam ja postavio pitanje da li model treba da se izvodi iz Zend_Db_Table ili ne. To pitanje mi je jasno, ne znam kako je to došlo u prvi plan na osnovu mog post-a... 
[ Mister_rap @ 07.05.2009. 21:30 ] @
String, premda ne mogu nista reci o eventualnoj razlici o performansama.
U mom slucaju upiti tako formirani su mi pregledniji i samim tim gotivniji.
[ Nikola Poša @ 07.05.2009. 22:13 ] @
Ok, hvala na brzim odgovorima...
Pre neki dan sam uzeo malo da prepravljam modele u jednom CMS na kome radim, pa sam slučajno na jednom forumu primetio da ljudi forsiraju te "zahvate" sa Zend_DB_Select klasom, pa rek'o da čujem mišljenje nekog iskusnijeg što se toga tiče. A kad sam uzeo malo da proučavam tu klasu i kad sam video kroz koje se sve procedure prolazi da bi se formirao upit, odma' mi je palo napamet pitanje pada performansi... Jes' da je tako dobijen upit 100% siguran i validan, ali meni je mnogo bitinija brzina, tako da ću se i ja, za sada, držati stringa... 
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|