jak na databázi LEFT JOIN ON i za pomoci NotORM
- Zerig
- Člen | 70
Zdravím,
v Nette jsem úplný začátečník a potřebuji poradit.
Mám v DB 2 tabulky, co potřebuji při výpisu spojit LEFT JOIN. Pokoušel
jsem se to přes Connection:
$database = new Connection('mysql:host=localhost;dbname=czziva-bible', 'czziva-bible', 'ni2grrxu');
foreach ($database->table('order') as $application)
{
$this->i=$this->i+1;
$this->template->chapterName[$this->i] = $application->ID;
}
Takto to funguje, ale nevím jak na LEFT JOIN.
Pak jsem se dočetl něco o NotORM. Všude píší, že je na to
šikovnější. Podle všeho by měl být v Nette už zapouzdřen, ale nevím,
nejde mi pořád nějak spustit.
Nenaapsal by mi někdo kompletně, co a jak kde nastavit?
Nette Framework 2.0.8
- David Matějka
- Moderator | 6445
Ahoj a vítej :)
jako první věc ti doporučuju pročíst si quickstart tam se dozvíš např
to, jak se správně
připojit k databázi
v Nette je pro přístup k databázi Nette\Database, které vychází z NotORM, ale dneska by asi bylo těžký tam najít jeden původní řádek :)
left joiny jsou v nette\database zatím trochu problém, ale většinou je ani nepotřebuješ. např.
foreach($connection->table('book') as $book) {
$author = $book->author;
}
to ti provede nejdřív dotaz, ve kterým vybere všechny záznamy z tabulky
book a $book->author si podle cizího klíče v databázi zjistí, kam
ukazuje sloupeček author_id a podle toho provede druhej dotaz. pravděpodobně
něco takového budeš potřebovat i ty, ne? :)
ale nejdříve si fakt projdi quickstart, vysvětlí ti spoustu věcí a
zodpoví spoustu otázek.
- Šaman
- Člen | 2666
LEFT JOIN je typicky potřeba při vypsání autorů, kteří nenapsali žádnou knihu, učitelů kteří nemají přiřazenou třídu apod. Tedy k výpisu dat z jedné tabulky, které nemají odpovídající záznam v jiné tabulce.
NDatabase to prý zatím nepodporuje, ale je na to trik.
Editoval Šaman (3. 4. 2013 21:49)
- Zerig
- Člen | 70
V quickstartu se vždy zaseknu zde: https://doc.nette.org/cs/quickstart
a laděnka hlásí:
Class ‚Nette\Object‘ not found
File: …/app/model/Repository.php Line: 9
1: <?php
2: namespace Todo;
3: use Nette;
4:
5: /**
6: * Prov�d� operace nad datab�zovou tabulkou.
7: */
8: abstract class Repository extends Nette\Object
9: {
10: /** @var Nette\Database\Connection */
11: protected $connection;
12:
13: public function __construct(Nette\Database\Connection $db)
14: {
15: $this->connection = $db;
A já nevím co s tím, proto jsem tento krok přeskočil. Ale rád bych věděl kde mám chybu.
- jiri.pudil
- Nette Blogger | 1032
Doporučuji pročíst totok, ev. i přilehlé stránky o jmenných prostorech.
- Zerig
- Člen | 70
Vše jsem si pročetl. Snad to už nějak chápu. Ale pořád nerozumím, kde
mám chybu.
Používám nonprefix verzi.
A stále mi to hlásí:
Class ‚Nette\Object‘ not found
File: …/app/model/Repository.php Line: 9
1: <?php
2: namespace Todo;
3: use Nette;
4:
5: /**
6: * Prov�d� operace nad datab�zovou tabulkou.
7: */
8: abstract class Repository extends Nette\Object
9: {
10: /** @var Nette\Database\Connection */
11: protected $connection;
12:
13: public function __construct(Nette\Database\Connection $db)
14: {
15: $this->connection = $db;
Jestli to dobře chápu tak:
Jsem si tu vytvořil jmenný prostor Todo,
tudíž pokud někde budu chtít volat tuto třídu, budu muset použít
Todo\Repository
Tím že je tam use Nette, to znamená, že:
extends Nette\Object, je Nette\Object a ne Todo\Nette\Object
ale potom nerozumim, proc ho tedy nechce najít?
- David Matějka
- Moderator | 6445
no to jsem z toho taky na vetvi :) protoze na Nette\Object zavisi tridy z Nette (vcetne treba ladenky), takze uz musi byt nacteny. muzes sem prosim hodit cely vystup z ladenky? (nekam to nahraj jako html)
- jiri.pudil
- Nette Blogger | 1032
Zkus projít řešení navrhovaná tu a založ prosím nové vlákno; tady jsme značně OT.
- Zerig
- Člen | 70
Taky mě už napadlo udělat nové téma.
Koukal jsem na to, ale moc nepomohlo.
Jinak tady je nové vlákno, které jsem na toto téma založil: https://forum.nette.org/…ct-not-found#…