Nextras\ORM – ORM nad Nextras\Dbal
- hrach
- Člen | 1838
Nextras Orm
$author = new Author();
$author->name = 'Jon Snow';
$author->born = 'yesterday';
$author->mail = 'snow@wall.st';
$publisher = new Publisher();
$publisher->name = '7K publisher';
$book = new Book();
$book->title = 'My Life on The Wall';
$book->author = $author;
$book->publisher = $publisher;
$orm->books->persistAndFlush($book);
Editoval hrach (4. 12. 2015 0:21)
- hrach
- Člen | 1838
@Zax
Máš tu někde svůj thread pro Nextras\ORM? Právě jsem zkouknul tvoji přednášku a líbí se mi to, mám v plánu si s tím brzo začít hrát, tak jenom abych věděl, kam můžu ty své dojmy směřovat ;-)
V té přednášce 20:05 jak tam taháš ty komentáře, k čemu slouží ten ->get()? Nestačilo by prostě $this->allComments->findBy(…)? Je to drobnost, ale už se vidím, jak na to budu zapomínat a zrovna v této situaci IDE ani nenapovídá.
To je proto, ze $this->allComments je instance OneHasMany, ktera ma dale
metody jako add, set, atp. Metoda get()
vraci kolekci, se kterou
normalne pracujes pri vsech vyberech. Akorat je tato kolekce uzpusobena pro
praci nad danou relaci.
Pokud bych anotaci navrchu tridy spravne napsal jako
/**
* @property OneHasMany|Comment[] $allComments {1:n CommentsRepository}
*/
tak uz mi to v PhpStormu bude napovidat spravne jak pri prochazeni foreachem, tak pri tomto volani.
- Zax
- Člen | 370
Konečně jsem si našel čas na zkoušení, nicméně se mi nějak nedaří rozjet nové Nette\Database. Composer používám velmi krátce, možná je chyba mezi židlí a klávesnicí..
EDIT: ano, chyba byla přesně tam :-) Příspěvek jsem upravil, aby tolik nestrašil.
Editoval Zax (29. 6. 2014 7:38)
- Zax
- Člen | 370
Jen dvě drobnosti:
Když si víckrát podědím DIModel
- Zax\Model\Orm extends DIModel
- Web\Model\Orm extends Zax\Model\Orm
a pak používám Web\Model\Orm, tak se mi nenačítají anotace v Zax\Model\Orm. Nevím zda je to intended.
Pokud není nadefinovaný žádný repozitář v DIModelu, tak to háže notice ;-)
EDIT: Ještě třetí drobnost:
Chtěl bych používat prefixy. Zkusil jsem toto:
namespace Zax\Model;
use Nextras\Orm\Mapper\Mapper as BaseMapper;
class Mapper extends BaseMapper{
public function getTableName() {
return 'zax_' . parent::getTableName();
}
}
ale nenačítají se mi vazby (bez prefixů a tohoto kódu se načítají v poho). Cizí klíče mám nastavené správně (ve smyslu že směřují kam mají), ale hádám, že je třeba ještě něco změnit v mapperu. No, jdu si dál hrát, třeba na to přijdu :)
EDIT: Tak jsem právě spustil composer update a prefixy už fungují :-) Děkuju!
Editoval Zax (11. 7. 2014 21:39)
- hrach
- Člen | 1838
@Zax
- tu chybu s getTableName() jsem opravil „omylem“, pac jsem to taky nejak potreboval a nefungovalo to :D
- notice by tam jiz byt nemela
- to parsovani do hloubky u DIModelu, kdyztak posli pull, zatim sem to nepotreboval a mam tunu jinych veci na programovani do orm :D
díky! :)
- elektricman
- Člen | 29
Ahoj :)
Mám dotaz.
Chtěl bych například mít v entitě properity address
, která
reprezentuje objekt Address (ten ale není entitou)
jen se skládá ze tří sloupečků v DB (address_street, address_city,
address_postcode).
Jen bych potřeboval nějak napsat setter a getter pro tu properity
address.
Doufám že sem to napsal srozumitelně :)
Jde to nějak?
Napdá mě bud přímo v entitě napsat setter a getter s tím že budu mít přístup k těm sloupčkům normálně z mapperu. A nebo to nějak nacpat do mapperu.
Edit: Když si udelám virtuální properity se setterem a getterem na ten Objekt Address, tak se mi ho to snaží persistovat do databáze :(
Editoval elektricman (10. 8. 2014 10:57)
- hrach
- Člen | 1838
@elektricman a ten Address ma byt i writeable? toto opravdu nefunguje?
/**
* @property-read Address $address {virtual}
* @property string $addressStreet
* @property string $addressCity
* @property string $addressPostCode
**/
class MyEntity extends Nextras\Orm\Entity\Entity
{
public function getAddress()
{
return new Address($this);
}
}
- hrach
- Člen | 1838
@jenicek ukazka nikde neni, prakticky se do nej pisou metody na select dat, ktery nejde dostat standardnim rozhranim a jsou tedy mapper-specific.
/**
* @method ICollection|Author[] findBySomeMagic()
*/
class AuthorsRepository extends Repository {}
class AuthorsMapper extends Mapper
{
public function findBySomeMagic()
{
return $this->databaseContext->fetchAll('your sql query');
}
}
- Jan Suchánek
- Člen | 404
@hrach Ok, jasně a půjde vytvořit pomocí Nextras\Orm entita, která zjistí své předky a potomky nebo to se musí dělat odděleně? Nebo je to k ničemu?
/**
* @property-read int $id
* @property-read int $parent_id
* @property-read int $sort
* @property ManyHasMany|Category[] $ancestors {m:n CategoriesRepository} // tady přesně netuším jak
* @property ManyHasMany|Category[] $descendants {m:n CategoriesRepository} // tady přesně netuším jak
* @property OnToMany|Locale[] $locales {1:n LocalesRepository}
*/
final class Category extends Entity
{
}
a když bych chtěl k Category získat i její třeba překlad pomocí další entity Locale?
Může entita ověřovat i délku ukládaného řetězce?
* @property string $name // varchar 40?
Editoval jenicek (12. 8. 2014 17:02)
- hrach
- Člen | 1838
@jenicek
- prvni task je slozitejsi. Spravne by to melo vypadat takto:
/**
* @property int $sort
* @property Category|NULL $parent {m:1 CategoriesRepository $children}
* @property OneHasMany|Category[] $children {1:n CategoriesRepository $parent}
*/
final class Category extends Entity
{
}
- poznamky
- id neni nutne, jiz je v predkovi
- parent je prima vazba na parenta, pristupuj k tomu jako k entite, ne k id.
- volitelne pak nejake virtualni gettery na protunelovani do hloubky, nicmene, nebude to efektivni, protoze pro kazdou uroven zanoreni bude jeden dotaz.
- Locale entity: mas to v podstate spravne (preklep), volitelne si muzes napsat neco takovehoto:
/**
* @property OneHasMany|Locale[] $locales {1:n LocalesRepository}
* @property-read string $name {virtual}
*/
final class Category extends Entity
{
private $localeService;
public function injectLocaleService(LocaleService $localeService)
{
$this->localeService = $localeService;
}
public function getName()
{
$translation = $this->locales
->get()
->findBy(['lang' => $this->localeService->getLang()])
->fetch();
return $translation->translation;
}
}
- validace: nic takoveho neni implementovano, udelej si idealne setter s validaci.
- Jan Suchánek
- Člen | 404
@hrach Prozkoumám díky. Čučel jsem na tvoje nový ORMko a přemýšlel jsem zda půjde to samé lépe než v YetORM (pěkněji, přehledněji a pečlivěji?).
Tady jsou položené dotazy v SQL co mi ta prasárna zatím generuje.
Je to výpis „omezeného stromku“ s jazykovými překlady včetně toho, že má i nějaký výchozí lang.
InjectService vypadá zajímavě.
add validate: OK jasný, ale asik by se hodila taky, ale nejspíš to do Entit nepatří.
No holt vyzkouším uvidím.
Zatím mi vyhovoval YetORM, ale píšu vše zatím hulvátsky to vím :).
- elektricman
- Člen | 29
@hrach moje chyba :( Funguje to jak má. Jen já tam měl špatný
závorky u toho {virtual}.
Omlouvám se za mistifikaci :)
Editoval elektricman (14. 8. 2014 19:46)
- hrach
- Člen | 1838
- elektricman
- Člen | 29
Zdravím.
Chtěl sem se zeptat, jesli v nové verzi korektně fungují asociace hasOne, pro NULL hodnoty.
Když mám například entitu
/**
* @property Workgroup|NULL $workgroup {m:1 WorkgroupsRepository}
* ...
**/
class User extends Entity { .. }
Mě to pořád při $entity->toArray(IEntity::TO_ARRAY_RELATIONSHIP_AS_ID) (ale i jinde) vyhazuje vyjímku:
PDOException #42S22
SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'where clause' search►
SQL
SELECT `workgroups`.*
FROM `workgroups`
WHERE (`id` IN ((`0` IS NULL)))
prostě se to snaží hledat v tomto případě workgroup s ID = NULL, přitom by to mělo vrátit prostě NULL, že není, protože v db je uložebo workgroup_id = NULL.
Chtěl sem napsat nějakej failující test, ale jaksi mi failujou uplně
všechny od nextras/orm kvuli nějaky sessně, tak se mě to nechtělo řešit
:o)
Jen sem se chtěl zeptat jestli vám to dělá taky?
- vitkutny
- Člen | 73
@hrach mam stejný problém, projevuje se po smazání metody
getParent v entitě:
https://github.com/…u/Entity.php
sloupec parent v db je nullable
- hrach
- Člen | 1838
@elektricman @vitkutny diky moc, fixed! https://github.com/…db3a5ff3b6ea divny je, ze jsem na to nenarazil? A neprijde mi, ze by to byla regrese :-)
- elektricman
- Člen | 29
@hrach Díky za supr rychlou opravu :)
Pro jednu entitu už to šlape jak hodinky,.. ale pokud tahám celej list (přes
findAll), tak problém přetrvává :(
PDOException #42S22
SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'where clause' search►
SQL
SELECT `workgroups`.*
FROM `workgroups`
WHERE (`id` IN ((`0` IS NULL) AND (`1` = 3) AND (`2` = 5) AND (`3` = 3) AND (`4` = 1) AND (`5` = 2)
AND (`6` = 2) AND (`7` = 2) AND (`8` = 2) AND (`9` = 2) AND (`10` = 3) AND (`11` = 2) AND (`12` = 2)
AND (`13` = 2) AND (`14` = 4) AND (`15` = 4) AND (`16` = 2) AND (`17` = 6) AND (`18` = 2) AND (`19`
IS NULL) AND (`20` IS NULL) AND (`21` IS NULL) AND (`22` = 4) AND (`23` IS NULL) AND (`24` = 2) AND
(`25` = 5) AND (`26` IS NULL) AND (`27` IS NULL) AND (`28` IS NULL) AND (`29` IS NULL) AND (`30` IS
NULL) AND (`31` IS NULL) AND (`32` IS NULL) AND (`33` IS NULL) AND (`34` IS NULL) AND (`35` IS NULL)
AND (`36` = 2) AND (`37` IS NULL) AND (`38` IS NULL) AND (`39` IS NULL) AND (`40` IS NULL) AND (`41`
IS NULL) AND (`42` IS NULL) AND (`43` IS NULL) AND (`44` IS NULL) AND (`45` = 1) AND (`46` IS NULL)
AND (`47` IS NULL) AND (`48` = 2) AND (`49` = 2) AND (`50` IS NULL) AND (`51` IS NULL) AND (`52` =
3) AND (`53` = 5) AND (`54` = 5) AND (`55` IS NULL) AND (`56` = 10) AND (`57` IS NULL) AND (`58` IS
NULL) AND (`59` IS NULL) AND (`60` = 5) AND (`61` = 5) AND (`62` = 2) AND (`63` = 9) AND (`64` = 1)
AND (`65` = 4) AND (`66` IS NULL) AND (`67` IS NULL) AND (`68` = 10) AND (`69` = 5) AND (`70` = 2)
AND (`71` = 3) AND (`72` IS NULL) AND (`73` IS NULL) AND (`74` IS NULL) AND (`75` IS NULL) AND (`76`
= 10) AND (`77` IS NULL) AND (`78` IS NULL) AND (`79` IS NULL) AND (`80` IS NULL) AND (`81` IS NULL)
AND (`82` IS NULL) AND (`83` IS NULL) AND (`84` = 2) AND (`85` = 2) AND (`86` IS NULL) AND (`87` =
10) AND (`88` = 3) AND (`89` IS NULL) AND (`90` IS NULL) AND (`91` IS NULL)))
Edit: Ale ted koukám že to nefunguje jen když první položka toho listu, má NULL hodnotu v DB .. pokud to mají další vpořadí, tak to nevadí … =/
Editoval elektricman (16. 9. 2014 9:06)
- hrach
- Člen | 1838
@elektricman dalo mi to zabrat… je to bug v orm, ale diky tomu jsem objevil i bug v nettedatabase
doporucuji update tedy obou :-)
- vitkutny
- Člen | 73
@hrach chtěl bych se jen zeptat jestli je už možné/bude možné dělat jednosměrně definované entity? mám třeba entity menu a page.. a u page chci vazbu na menu, ale menu by na ní nemělo být závislé… jestli o tom menu entity potřebuje vědět tak aspoň jestli jde někde přetížit v repository nějaká metoda abych tam nějak mohl tu definici dostat? jinak orm super jedno z mála které se dá použít s mým pofidérním používáním namespace :)
- hrach
- Člen | 1838
@vitkutny zatim me to moc nenapadlo, ale prijde mi to jako relevantni pozadavek, takze https://github.com/…rm/issues/29
- elektricman
- Člen | 29
Jestli muzu jeste pripominkovat:)), tak když v mapperu použiju metodu typu
class AuthorsMapper extends Mapper
{
/**
* return array|IRow[]
*/
public function findBySomeMagic()
{
$selection = $this->databaseContext
->table($this->getTableName())
->where(...)
->where(...);
return $selection->fetchAll();
}
}
Tak mi to vzhodí exception, že položky nemají primární klíč, protože ActiveRow jen přetipovanej na (array) nevrátí data řádku jako pole, ale nativně přetypovanej objekt do pole..
A nenapadl mě jinej způsob, jak využít Nette
Selection\Database\Selection v Mapperu..
Jde to nějak?
Editoval elektricman (20. 9. 2014 20:53)
- hrach
- Člen | 1838
@elektricman pokud vracis pole, jsou data obalena do arrayCollection, coz neni uplne nejefektivnjesi, pokud s tim chces jeste dal pracovat (dost casto nechces), takze proto selection neni podporovana a zatim se pouziva SqlBuilder, nad kterym se da jeste pracovat, tj. pouzij
$builder = $this->builder();
$builder->addWhere();
return $builder;
a melo by to fungovat :-)
- elektricman
- Člen | 29
Zdá se mi to, nebo se nevolají akce onBeforePersist
a
onAfterPersist
(ani onXxxxUpdate
..) na Entitě ?
Ani v kodu nikde nemužu najít že by se na ně někde volal fireEvent.
v onPersist se mi totiž nedaří změnit a persistoat nějaká její data.
(to je logicky, protože bych tam musel zavolat
$this->getRepository()->persistAndFlush($this);
a z toho to
vypadne protože entita je v isPersisting[].
.)
Nic řeším ptákoviny: Stejně to spíš patří do Repozitáře, do
přetížené persist
metody… :)
Editoval elektricman (24. 9. 2014 13:07)
- Jan Tvrdík
- Nette guru | 2595
Zrovna události hrach včera předělával, takže otázka v jakém je to teď přesně stavu.
- vitkutny
- Člen | 73
je nějak možné se z entity nebo repozitáře dostat přes public metody k údajům databáze jako jestli je sloupec text varchar jakou má délku a podobně? zkouším udělat automaticky generované formuláře a teď mám info jen že se jedná o string, kdybych měl ty údaje můžu rozhodnout jestli použít addText addTextarea a případně rovnou aplikovat validační pravidla. Díky
- Matey
- Člen | 142
@hrach nazdar, prosím ťa, nedopátral som sa ako by som v repository metode getBy() dosiahol OR miesto AND.
konkrétne hľadám zhodu užívateľa podľa mena alebo emailu
$this->getBy(['username' => $username, 'email' => $email]);
btw nedávno som niekde čítal že začínaš s dokumentáciou, bude sprístupnená postupne alebo až ako kompletný celok?
- hrach
- Člen | 1838
@Matey
- toto nejde udelat nad repository, idealne si to naproxyuj do mapperu.
(pridas anotaci metody nad repository, a naimplementujes metodu v mapperu,
ktery data vytahne a
vrati:
$this->repository->hydrateEntity($this->databaseContext->fetch('SELECT *...');
- dokumentace bude postupne, ale hlavne jeste nemam na ni dodelany system, respektive mam uz novy web, ale jeste musim doprogramovat skript, ktery bude checkoutovat repozitare a vytahovat z nich jednotlive verze pro ruzne nextras balicky.
- Matey
- Člen | 142
@hrach
mám to takto
/**
* @method Users getTest($username, $email)
*/
class UsersRepository extends Repository {}
class UsersMapper extends Mapper {
public function getTest($username, $email) {
$data = $this->databaseContext->fetch('SELECT * FROM users WHERE username = ? OR email = ?', $username, $email);
return $this->repository->hydrateEntity([$data]);
}
}
ale dostávam: Data returned from storage does not contain primary value(s)
for ‚id‘ key.
Keď si dumpnem $data tak je tam všetko v poriadku, čiže aj id. Čomu
nechápem? :)
- hrach
- Člen | 1838
Podivej se, mas dve moznosti, bud vratis Entitu, (coz je pri get* metode zadouci):
$data = $this->databaseContext->query('SELECT * FROM users WHERE username = ? OR email = ?', $username, $email)->fetch();
return $this->repository->hydrateEntity($data);
nebo vratis data pro kolekce. tak ti staci vratit ResultSet.
return $this->databaseContext->query('SELECT * FROM users WHERE username = ? OR email = ?', $username, $email);
- Matey
- Člen | 142
takže potrebujem vrátiť Entitu alebo nič v prípade neúspešného hľadania
to čo si mi poradil neprejde, pretože hydrateEntity() vyžaduje array()
s týmto sa niekam dostanem, ale len ak sa v db niečo nájde(teda by som ešte potreboval dalšiu podmienku ak sa nič nenašlo vrátiť NULL).. no to je trošku wtf aby som musel robiť niečo takéto pre jednoduchý dotaz :(
public function getTest($username, $email) {
$data = $this->databaseContext->query('SELECT * FROM users WHERE username = ? OR email = ?', $username, $email)->fetch();
$array = [];
foreach ($data as $key => $value) {
$array[$key] = $value;
}
barDump($array, 'data');
return $this->repository->hydrateEntity($array);
}
trošku to rozoberiem, čo kedy dostávam..
$data = $this->databaseContext->query('SELECT * FROM users WHERE username = ? OR email = ?', $username, $email);
//Nette\Database\ResultSet
$data = $this->databaseContext->query('SELECT * FROM users WHERE username = ? OR email = ?', $username, $email)->fetch();
//Nette\Database\Row
foreach ($data.....)
//array() a teda to už hydrateEntity() zožere
Editoval Matey (28. 9. 2014 10:36)
- Matey
- Člen | 142
@hrach už je mi trápne pýtať sa, no ale čo narobím, keď skúšam a k ničomu nedospejem
tak je to správne, v podstate to isté ako keď som to prehodil cez
foreach.. dik
no žiaľ tým sa rieši len časť keď sa niečo nájde, akonáhle sa hľadá
neexistujúci záznam, zas to kričí
Data returned from storage does not contain primary value(s) for
‚id‘ key.
Čo podstrčiť do hydrateEntity() aby som v app dostával FALSE? tak ako je tomu ak použijem napr. getById() na neexistujúce id.
skúsil som jednoducho
public function getTest($username, $email) {
$data = $this->databaseContext->query('SELECT * FROM users WHERE username = ? OR email = ?', $username, $email)->fetch();
if (!$data) return FALSE; // pripadne NULL
return $this->repository->hydrateEntity((array) $data);
}
no dostávam NetteMapper could convert only array|SqlBuilder|ResultSet argument, recieved „boolean“.
zároveň pripájam ešte jednu otázku :)
mám tabuľku contact_us, na to entitu ContactUs, repo ContactUsRepository,
mapper ContactUsMapper a v Orm zaregistrované ContactUsRepository.. dostávam
chybu Class App\Model\ContactU does not exist
‚s‘ z ContactUs sa nejak stráca.. ak z toho spravím ContactUssREpository, ContactUssMapper a zaregistrujem ContactUssRepository tak to prejde.. ale data žiadne nezískam, lebo sa to snaží ťahať z contact_uss, začínam sa chytať za hlavu :D (a ty zo mňa už určite tiež) ako to riešiť? prípadne nejde o nejaky bug?
Editoval Matey (28. 9. 2014 22:13)
- hrach
- Člen | 1838
- s tim vracenim null|false je to bug. jdu to opravit., edit: bez fixu by to slo tak, ze si tu proxy napises do repository rucne…
- nazvy repository a mapperu jsou podstatna jmena v mnoznem cisle, kdyz tam das neco takovehoto, tak se to chova takto divne. Resenim muze byt treba nekde v bootstrapu, nebo pred vytvorenim db uprava inflekce
Inflect\Inflect::$uncountable['contactus'] = TRUE; // schvalne malym
snad by to melo fungovat.
- vitkutny
- Člen | 73
@hrach nevím jestli mám chybu někde v definici nebo se jedná o bug, mám v entitě
* @property Menu\Entity|NULL $parent {m:1 Menu\Repository $children}
* @property Menu\Entity[] $children {1:m Menu\Repository $parent}
a při přiřazení parent dostávám chybu:
Nextras\Orm\Relationships\ManyHasOne-> updateRelationship
Call to undefined method Nextras\Orm\Entity\Collection\Collection::add().
případně remove() pokud již v entitě je parent nastavený z db
- Jan Tvrdík
- Nette guru | 2595
@vitkutny Instance čeho je v $children
? Teď to vypadá,
že je tam z nějakého důvodu Collection
, přitom by tam měla
být instance OneHasMany
. Inicializuješ to property
nějak ručně?
Tohle mi např. bez problémů projde:
/** @var MenuRepository $repo */
$repo = $this->orm->menu;
$a = new Menu();
$aa = new Menu();
$ab = new Menu();
$repo->attach($a);
$aa->parent = $a;
Assert::count(1, $a->children);
$a->children->add($ab);
Assert::count(2, $a->children);
- Matey
- Člen | 142
@hrach
Inflect\Inflect::$uncountable['contactus'] = TRUE;
toto nepomohlo, dal som to hneď za autoloader v bootstrape.
vyriešil som to prepísaním tejto metody v ContactUsRepository
public static function getEntityClassNames() {
$class = substr(get_called_class(), 0, -10);
return [$class];
}
je vôbec potrebné aby metóda getEntityClassNames vracala Inflect::singularize($class)?
Editoval Matey (29. 9. 2014 14:41)
- vitkutny
- Člen | 73
@JanTvrdík máš pradu, děkuji. Způsobovala to tato metoda v entitě:
public function getChildren()
{
return $this->getValue('children')->get()->findBy(['hidden' => NULL]);
}
můžu se zeptat jak jinak ji zapsat? mohl bych stávající přejmenovat na allChildren a tuhle dát jako virtual, je ještě jiný způsob? v annotation parseru je filteredrelationship, jestli to slouží k tomuto účelu případně jak to použít?
Edit:
btw chtěl jsem si dát mínus na svou otázku kterou jsem si měl důkladněji
prověřit, ale nejde to :(
Editoval vitkutny (29. 9. 2014 15:15)
- hrach
- Člen | 1838
@Matey hmhm, fungovat by to melo. https://github.com/…/Inflect.php#… mel si smazanou cache? kazdopadne, kdyz uz jsi to vyresil… :-) to je urcite taky korektni reseni. Tim, ze to mas pretizeny dokonce jen v tom kokretnim presenteru, muzes to delat „staticky“, tj. vracet rovnou „ContactUs“ s namespace.
@vitkutny vzdy musi existovat property s plnou vazbou. filteredrelationship neni zatim moc otestovane a moc vyhod oproti virtual metode nepridava – zatim. ve verzi 2 bude, ale do te doby bych to bral jako experimental.
- pavelmlejnek
- Člen | 16
Snažím se naroubovat Orm na mojí vlastní namespace strukturu, nicméně narážím na problém s pevně nastavenými cestami.
Představuji si zhruba něco takového:
- App\FrontendModule\Model\Orm\Repositories\UsersRepository
- App\FrontendModule\Model\Orm\Mappers\UsersMapper
- App\FrontendModule\Model\Orm\Entities\UserEntity
Existuje nějaká možnost jak tohoto chování dosáhnout? Po zběžném prohlédnutí zdrojáků jsem se pokoušel ručně registrovat jednotlivé třídy přes config.neon v sekci orm, ale to se mi nepovedlo.
Díky za odpověď :)