Změna API Nette\Database\Table\Selection?

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

Ahoj,

byl jsem zvyklý používat pro práci s databází factories (teď servicies), které dědily od Nette\Database\Table\Selection. Nicméně jsem narazil na problém při tvorbě nového projektu pod Nette 2.1., kde Nette\Database\Table\Selection __construct() metoda má jiné rozhraní. Dříve stačilo v konstrukoru předat pouze $conncetion a název tabulky. Nyní je zapotřebí i implementace Nette\Database\IReflection. Kde tuto implementaci seženu, abych své tabulky zprovoznil? Popřípadě jaká je vaše best practice na práci s databází?

Pro větší přehlednost přidávám kód třídy users, která v nižších verzích nette fungovala a nyní již ne.

use Nette\Database\Table\Selection;

/**
 *
 * @author veselda7
 */
class Users extends Selection {

    const
            TABLE_NAME = 'users',
            COLUMN_ID = 'id',
            COLUMN_NAME = 'email',
            COLUMN_PASSWORD = 'password',
            COLUMN_ACTIVATED = 'activated',
            COLUMN_ACTIVATION_CODE = 'activation_code',
            PASSWORD_MAX_LENGTH = 4096;

    public function __construct(\Nette\Database\Connection $connection) {
        parent::__construct('users', $connection);
    }

}
Jan Suchánek
Člen | 404
+
0
-

veselda7: Nemyslíš tohle? více zde.

veselda7
Člen | 7
+
0
-

jenicek napsal(a):

veselda7: Nemyslíš tohle? více zde.

A jaké je přesně prosím použití? To ted místo dědění ze Selection mám dědit z Context? To když jsem udělal, tak jsem získal z laděnky hlášku:

Multiple services of type Nette\Database\Context found: nette.database.default.context.

Když jsem zkusil získat Nette\Database\Context pomocí inject metody, vždy zůstala NULL a tudíž volání metody table() končí s chybou.

ViPEr*CZ*
Člen | 818
+
0
-

Obecně se Nette\Database\Table\Selection nedoporučovalo dědit? Nebo mi něco uniklo a ta třída Users samotnou Selection o něco rozšiřuje? Typnu si že ne. Btw. když už existuje konstanta TABLE_NAME, tak bych ji použil i v konstruktoru :-)
Pokud by jste psal modely správně, pak by Vám stačilo namísto \Nette\Database\Connection v konstruktoru modelu přepsat jen na \Nette\Database\Context a bylo by hotovo.

veselda7
Člen | 7
+
0
-

ViPErCZ napsal(a):

Obecně se Nette\Database\Table\Selection nedoporučovalo dědit? Nebo mi něco uniklo a ta třída Users samotnou Selection o něco rozšiřuje? Typnu si že ne. Btw. když už existuje konstanta TABLE_NAME, tak bych ji použil i v konstruktoru :-)
Pokud by jste psal modely správně, pak by Vám stačilo namísto \Nette\Database\Connection v konstruktoru modelu přepsat jen na \Nette\Database\Context a bylo by hotovo.

Omlouvám se, ale celkově nemám velké zkušenosti a říci, že mám psát modely správně mi moc nepomůže. :-D
Mohl bych se tedy prosím zeptat, jak je psát správně? V dokumentaci je pouze popsáno, jako používat Table Selection API. Je vůbec správně dědit od třídy Selection? Mohl bych si někde přečíst ukázkovy příklad s jednou tabulkou? Omlouvám se pokud jsem něco přehlédl.

Editoval veselda7 (16. 2. 2014 12:05)

Mariocz
Člen | 52
+
0
-

Ukázka použití je třeba tady:

https://github.com/…pository.php

configu nastavíš databázi, objekt pro přístup k DB (repository) jako službu. tomu objektu v construktoru injectneš Nette\Database\Context

nakonec v presenteru získáš jen tu službu a o předání contextu se nestaráš

ViPEr*CZ*
Člen | 818
+
0
-

Btw tenhle příklad co píše Mariocz najdete také v celém zabaleném balíku Nette. ;-)

bazo
Člen | 620
+
0
-

veselda7 napsal(a):

Omlouvám se, ale celkově nemám velké zkušenosti a říci, že mám psát modely správně mi moc nepomůže. :-D
Mohl bych se tedy prosím zeptat, jak je psát správně? V dokumentaci je pouze popsáno, jako používat Table Selection API. Je vůbec správně dědit od třídy Selection? Mohl bych si někde přečíst ukázkovy příklad s jednou tabulkou? Omlouvám se pokud jsem něco přehlédl.

nie je spravne dedit od selection. neviem, kde na toto ludia chodia. spravne je vytvorit modelovu triedu, ktora zavisi na Context alebo teda aj Selection ak sa inak neda

veselda7
Člen | 7
+
0
-

Děkuju za odpovědi.

Editoval veselda7 (17. 2. 2014 10:57)