Struktura „entit“ vrácených pomocí Nette Database Explorer
- Šaman
- Člen | 2663
Ahoj, ve videu z konference (33.3 novinky v Nette 3) David mluví o tom,
že si budu moci definovat typy prvků formuláře a pak, když zavolám
$form->getValues()->name
bude Nette vědět, jakého je name
typu. PhpStorm mi to nebude podtrhávat a dokonce bude i napovídat.
Přesně tenhle problém jsem teď řešil na úrovni databáze. Po dlouhé
době nepoužívám ORM, ale velmi bych přivítal mít možnost někde si
definovat strukturu neEntit. Přepravku na data. Aby, pokud zavolám
$userRepository->get(1)->
Nette vědělo, že je to typu
?User
a PhpStorm mi ideálně našeptával jaké property nad ním
mohu volat.
Vzhledem k tomu plánovanému přidání struktury do formulářů a vzhledem k typovým šablonám předpokládám, že to Davida napadlo taky a už dávno, takže by mě zajímalo jestli se něco takového plánuje?
Editoval Šaman (10. 4. 2020 22:30)
- uestla
- Backer | 799
<OT>
Stávající oficiální repo bohužel není upgradované pro Nette 3, ač o to byly pokusy (https://github.com/…tORM/pull/23).
Navíc se objevily problémy se samotným konceptem, které by možná také stálo za to vyřešit (https://github.com/…RM/issues/19).
</OT>
Myslím ale, že @Šaman mluví o něčem, co by automaticky zjistilo strukturu databáze a podle ní našeptaávalo typy (bez nutnosti definovat vlastní entitní třídy).
- Šaman
- Člen | 2663
Nemyslel jsem automaticky, teď v době Nette 3.1 a PHP 7.4 si stejně
budeme muset (resp. měli bychom) spoustu struktur
psát sami
(formulář, šablona).
Myslel jsem to tak, že by bych si popsal i nějakou strukturu databáze. Ani
by to nemusely být plnohodnotné entity (nechci z toho dělat ORM). Stačilo
by definovat strukturu
$db->table('user')->get(1)->…
a výsledkem je nějaký
objekt Row
, který ale má známou strukturu (->id
je int
; ->name
je string
).
Ale už mi došlo, že by to bylo poměrně omezené na get a find. Jakmile bych začal traverzovat mezi tabulkami, narostla by komplexita toho řešení a bylo by potřeba řešit některé problémy ormu.
chemix: Tak jako řeší, ale stejný argument by se dal
použít i pro strukturu formulářů a šablon. Koneckonců doteď jsme bez
toho taky docela v pohodě žili. Nicméně když je snaha pro to mít silně
typový kód a jedním z posledních míst, kde IDE nezná typ proměnné je
všechno, co se mi vrátilo z databáze, tak přemýšlím jak to čistě
vyřešit. Aniž bych začal psát ORM (v tom příkladu v pilotním
příspěvku je asi chyba. Není cílem vracet objekt User
. Jen
bych rád nadefinoval strukturu toho, co mi tabulka user vrátí tak, aby IDE
nekřičelo, že nezná typ a v ideálním případě i aby
našeptávalo.)
- Zdeno1981
- Člen | 115
ahoj @Šaman,
mého kolegu něco podobného už dávno napadlo, a nedávno jsem napsal
generátor entit pro formuláře z databáze
a není nutnost mít nějaké ORM a je to hodně pohodlné, vše krásně
napovídá vč. datových typů, uvedu příklad.
$form = new Form;
$form->addText(EntityForm::name, 'Name')->addRule(Form::MAX_LENGTH, EntityForm::MAX_LENGTH);
zpracování formuláře je pak.
/**@var Entity $values */
$values = $form->getValues();
$values->getName() === 'Nette' ? 'Nette' : 'NO';
$repository->save($values);
Editoval Zdeno1981 (11. 6. 2020 7:21)