Autor Zpráva
radvis
Profil *
Ahoj, mohl by mi někdo prosím poradit? Mám kód, který vybere záznam z více tabulek, ale vypíše mi pouze jeden záznam.
Kód:
     return $this->db->select('%n.*, %n AS `velikost`',
            $this->kategorie, $this->velikosti . '.velikost')
                 ->from($this->kategorie)
                 ->leftJoin($this->velikosti)
                 ->on('%n = %n', $this->kategorie . '.id_rodic',
            $this->velikosti . '.id_rodic')
                 ->groupBy($this->kategorie . '.id_rodic');


Díky za rady.
Majkl578
Profil
Není to náhodou dibi?
Pokud ano, fetchAll/fetchAssoc vrací všechny záznamy.
radvis
Profil *
Ano, je. V presenteru mám fetchAll, ale nefunguje to:(
Jan Tvrdík
Profil
nefunguje to
A jak se ta nefunkčnost projevuje?
AM_
Profil
radvis:
jestli tenhle kód něco vypíše, tak jsem čínský bůh srandy (tedy teoreticky by to šlo, ale to nebude tento případ).
To, že máš v presenteru fetchAll, ještě neznamená, že ho správně používáš, taky můžeš mít chybu v dotazu, nebo prostě v databázi je jen jeden odpovídající záznam. Těžko odsud vyvěštit.
radvis
Profil *
Funguje to přesně jak má, jen je problém vtom, že mi to vypíše pouze jeden výraz z db.
AM_
Profil
radvis:
Funguje to přesně jak má, jen je problém vtom, že mi to vypíše pouze jeden výraz z db.
Musím trvat na tom, že výše uvedený kód nevypíše lautr nic.
radvis
Profil *
Neměl bych ti zazlé, kdyby jsi mi poradil, jak to opravit. Ale pořád si stojím za svým, že to vypíše jeden záznam:D.
Majkl578
Profil
radvis:
Kód uvedený v [#1] nevypíše nic. "Něco" "někam" (do vzduchu?) vrátí instanci třídy DibiRow. Tím to končí. Pokud tu má někdo detekovat problém, vlož kód s dalším použitím.
radvis
Profil *
Presenter:
...
$kategorie = new Reality;
$this->template->kategorie = $kategorie->Kategorie()->fetchAll();
...


Model:
    return $this->db->select('%n.*, %n AS `velikost`',
            $this->kategorie, $this->velikosti . '.velikost')
                 ->from($this->kategorie)
                 ->leftJoin($this->velikosti)
                 ->on('%n = %n', $this->kategorie . '.id_rodic',
            $this->velikosti . '.id_rodic')
                 ->groupBy($this->kategorie . '.id_rodic');


Sablona:

{foreach $kategorie as $kategories}
{!$kategories->nazev}</strong>
{!$kategories->velikost} <!--zde se mi vypíše jeden záznam--> 
{/foreach}
AM_
Profil
No vida, tohle už něco vypíše :)
Ten osiřelý </strong> tam určitě nebude dobře.
Když tak koukám na ten dotaz, určitě tam má být "group by"? Neznám strukturu tvé tabulky a nevím, jaká v ní máš data, ale pojmenovávat primární klíč tabulky kategorií jako "id_rodic" je docela divné, a jestli to není primární klíč, tak mi není jasné, co to tam vymýšlýš.
radvis
Profil *
Promiň, to strong tam být nemá. Nejde v tuhle chvíli jak to je popsané, ale jak to funguje, potrebuju neco podobného jako je zde na sreality např: " Byty k prodeji
55 032 bytů: Půdní vestavby, 1+kk, 1+1, 2+kk, 2+1, 3+kk, 3+1, 4+kk, 4+1 a větší
". Je to strašná splácanina ten model, nevěděl jsem jak to dát dohromady.
Jan Tvrdík
Profil
Zavolej po provedení dotazu dibi::dump(), ať vidíš sestavený SQL dotaz. Bude se to ladit lépe, než DibiFluent.
AM_
Profil
radvis:
Byty k prodeji
55 032 bytů: Půdní vestavby, 1+kk, 1+1, 2+kk, 2+1, 3+kk, 3+1, 4+kk, 4+1 a větší
Ta velikost bude vždycky jeden záznam, nemůžeš v jednom řádku mít neurčitou množinu :)
To GROUP BY tam nepatří, dotaz by měl vypadat nějak takto:
  SELECT
    kategorie.nazev,
    velikosti.velikost
  FROM
    kategorie
    LEFT JOIN velikosti ON kategorie.velikost=velikosti.id


Z databáze se vrátí něco takového:
"Obytný dům"-"1+kk"
"Obytný dům"-"1+1"
"Obytný dům"-"2+1"
"Byt"-"1+kk"
"Byt"-"2+kk"
Pak to musíš nějakým chytrým cyklem vypisovat tak, aby vzniklo:
Obytný dům 1+kk,1+1,2+1
Byt 1+kk,2+kk

Použil jsem v dotazu jiné identifikátory, ty tvoje moc nechápu, nicméně toto je princip získávání dat z relace typu "jedna kategorie je v relaci s několika velikostmi"
radvis
Profil *
Stejne přemýšlím, že to dám do jedné tabulky, nebylo by to jednodužší než to řešit přes více tabulek?
AM_
Profil
radvis:
Stejne přemýšlím, že to dám do jedné tabulky, nebylo by to jednodužší než to řešit přes více tabulek?
No, rozhodně ne čistější :) možná by to bylo rychleji naprogramované, nicméně méně pružné. Řešení přes dvě tabulky je kvalitnější a do budoucna snáze modifikovatelné, ikdyž je trochu práce ho vytvořit. Samozřejmě když si kategorie napatláš do jednoho VARCHARu, budeš to mít nakóděné rychleji.
radvis
Profil *
AM_ díky za příklad, ale pokoušel jsem se to rozjet, ale stále nic:( asi to prozatím dám do té jedné tabulky a později bych to dal do jiné.
radvis
Profil *
Nevěděl by jsi spíš jak do:

$form->addText('title', 'Nadpis:');

Přidám class? Aby html vypadalo: <input type="text" name="title" class="test"> ? Díky:).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0