Tharos / LeanMapper

Lean Mapper is a tiny ORM based on powerful Dibi database abstraction library for PHP.
MIT License
87 stars 35 forks source link

Add id keys into obatained collection properties #153

Open jansramek opened 4 years ago

jansramek commented 4 years ago

Collection properties obtained from entity now using keys based on collection item's primary key.

janpecha commented 4 years ago

Ahoj, díky za PR, napadají mě k tomu ale 2 zádrhely:

Popravdě mě nenapadá jak to řešit líp, aby to bylo dostatečně univerzální :-/

jansramek commented 4 years ago

Ahoj, promiň že píši takhle s velkým odstupem.

$entity->get($primaryKey) může místo skalární hodnoty vrátit objekt, tudíž $value[$entity->get($primaryKey)] spadne na špatném typu indexu

Myslíš, že zkontrolovat jestli je proměnná scalar případně ji potom použít pro klíč není vhodné? V případě, že je prim. klíč objekt bych pak i očekával chování, že se id klíče v kolekcích nepoužijí.

$mapper->getPrimaryKey() vrací název sloupečku v DB, to ale nemusí odpovídat názvu property v entitě

Tady bychom potom mohli použít následující. Co myslíš? $primaryKey = $this->mapper->getEntityField($targetTable, $this->mapper->getPrimaryKey($targetTable));

janpecha commented 4 years ago

Ahoj,

možná bych to celé upravil do jiné podoby - koukal jsem jak to entita řeší teď (třeba při úpravě M:N vazeb) a řešením by bylo vytáhnout tu hodnotu primárního klíče z Row - takže např. $value[$entity->row->{$primaryKey}] = $entity;.

V Row jsou data DB řádku, takže není potřeba volat getEntityField, stačí pouze getPrimaryKey, a zároveň by tam měla být čistá skalární hodnota (alespoň pro primární klíč).


Ještě si říkám, jestli je tohle vůbec potřeba, co tahle úprava konkrétně řeší za potřebu?