Autor | Zpráva | ||
---|---|---|---|
Peet Profil |
Dobrý den, snažím se v zendu udělat jedoduchý JOIN a stále se mi nedaří.. už jsem pročetl snad všechny návody, ale stále to nějak nechápu, mohl by mi tu někdo pomoct ?
mám tabulku articles kde mám sloupec author_id a tabulku authors kde mám id,name. Potřebuji jednoduše mít ve výsledku vše z tabulky articles + jméno autora.. používám Zend_DbTable_Abstract následovně: <?php class Application_Model_DbTable_Articles extends Zend_Db_Table_Abstract { protected $_name = 'articles'; public function getArticle($article_id) { $query = $this->select()->join('authors as a','a.id = articles.autor_id',array('a.name as jmeno'))->where('id=?', (int) $article_id)->order('id DESC'); return $this->fetchAll($query); } } ?> Mockrát děkuji za pomoc. |
||
Mike8748 Profil |
#2 · Zasláno: 4. 9. 2014, 14:00:23
$select = $this->select(); $select->setIntegrityCheck(false); $query = $select->join(...); |
||
Peet Profil |
#3 · Zasláno: 4. 9. 2014, 14:16:32
Nefunguje ani tak..
|
||
Kajman Profil |
#4 · Zasláno: 4. 9. 2014, 14:22:27
Jakou chybu to hlásí?
|
||
Peet Profil |
#5 · Zasláno: 4. 9. 2014, 14:23:25 · Upravil/a: Peet
právě že žádnou.. jen je načtený layout a tam kde mám být layout()->content tak je prázdno..
Nevím zda nevadí že i v tabulce articles mám sloupec name.. stejně jako v autorech. |
||
Mike8748 Profil |
#6 · Zasláno: 4. 9. 2014, 14:26:18
Peet:
a zkoušel sis vypsat $select jestli se ten dotaz sestavil správně jak si představuješ? případně tedy co vrací fetchAll($select)? |
||
Peet Profil |
#7 · Zasláno: 4. 9. 2014, 14:28:54
nevím jak vypsat.. přes var_dump je furt prázdno.. ikdyž ve viewku smažu obsah a napíši tam ahoj tak ani to se nezobrazi, prostě to spadne někde v tom db modelu..
|
||
Peet Profil |
Problém je, že mi nefunguje ani toto:
class TestDb extends Zend_Db_Table_Abstract { public function testF(){ $query = $this->select()->from('articles')->where('id=?',3); return $this->fetchRow($query); } } funguje to pouze takto: class TestDb extends Zend_Db_Table_Abstract { protected $_name = 'articles'; public function testF(){ $query = $this->select()->where('id=?',3); return $this->fetchRow($query); } } Jakmile použiji funkci ->from(..) , tak nefunguje.. to same jako s join..
|
||
Mike8748 Profil |
#9 · Zasláno: 4. 9. 2014, 20:02:58
Peet:
třída musí obsahovat jméno tabulky s kterou souvisí (protected $_name) pokud pro dotazování použiješ Zend_Db_Table_Select vytvořený metodou select() tak lze odkazovat pouze na tabulku pro kterou byl vytvořen (definováno právě $_name) pokud chceš odkazovat na jinou tabulku např. pomocí join() tak je třeba danému selectu nastavit kontrolu integrity na false ( $select->setIntegrityCheck(false) ) jinak se nesestaví ten SQL dotaz. druhá možnost je použít select() ne z Zend_Db_Table (tak jak to děláš teď) ale přímo z Zend_Db_Adapter. potom můžeš bez problémů použít ->from() atd |
||
Peet Profil |
#10 · Zasláno: 4. 9. 2014, 20:26:56
Toto mi ale také nefunguje:
class TestDb extends Zend_Db_Table_Abstract { public function testF(){ $query = $this->select()->setIntegrityCheck('false')->from('articles')->where('id=?',3); return $this->fetchRow($query); } } A pokud použiji db adapter: class TestDb extends Zend_Db_Adapter{ public function testF(){ $query = $this->select()->from('articles')->where('id=?',3); return $this->fetchRow($query); } tak to skončí errorem. Mohu se tedy spíš zeptat takto: Když používáte join, jak ho použijete ? co je ideální pro pracování s db ? Předem mockrát díky :) |
||
Časová prodleva: 10 let
|
0