jak na databázi LEFT JOIN ON i za pomoci NotORM

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Zerig
Člen | 70
+
0
-

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
+
0
-

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 | 2635
+
0
-

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
+
0
-

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.

Ivorius
Nette Blogger | 119
+
0
-

Třída Nette\Object nebyla nalezena. Nepoužíváš nějakou prefixovanou verzi nette? Zkus kdyžtak místo Nette\Object použít \NObject

Editoval Ivorius (3. 4. 2013 23:33)

Zerig
Člen | 70
+
0
-

Nepomohlo, ale zjistil jsem, že když to nechám na:

abstract class Repository extends Object

Tak to zas hlásí chybu v Todo:

Class ‚Todo\Object‘ not found

jiri.pudil
Nette Blogger | 1028
+
0
-

Doporučuji pročíst totok, ev. i přilehlé stránky o jmenných prostorech.

Zerig
Člen | 70
+
0
-

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
+
0
-

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)

Zerig
Člen | 70
+
0
-

Taky mi to přijde divný :D

Tady je celá strana laděnky
http://uloz.to/…l-error-html

jiri.pudil
Nette Blogger | 1028
+
0
-

Zkus projít řešení navrhovaná tu a založ prosím nové vlákno; tady jsme značně OT.

Zerig
Člen | 70
+
0
-

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#…