Struktura „entit“ vrácených pomocí Nette Database Explorer

Šaman
Člen | 2635
+
+1
-

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)

CZechBoY
Člen | 3608
+
0
-

Existuje jeste YetOrm?

uestla
Backer | 796
+
0
-

<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).

chemix
Nette Core | 1296
+
0
-

@Šaman neresi tohle pro IDE jen @var User radek nad timto volanim?

Šaman
Člen | 2635
+
+1
-

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.)

CZechBoY
Člen | 3608
+
0
-

No mě zrovna přijde, že se zrovna dala technika ORM do formulářů a případně šablon. Otypuje se nějaká „neznámá“ struktura tím, co předpokládám že tam je, což jsou prakticky i ručně psané schémata pro databázi (ORM).

MKI-Miro
Člen | 271
+
0
-

mna tato otazka taktiez zaujima, planuje sa teda nieco v nette tymto smerom urobit?

Zdeno1981
Člen | 114
+
0
-

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)