New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Změna výchozí hodnoty vazby m:hasOne #77

Open
castamir opened this Issue Oct 10, 2014 · 7 comments

Comments

Projects
None yet
4 participants
@castamir
Collaborator

castamir commented Oct 10, 2014

V podstatě od zveřejnění LM si nepamatuju situaci, kdy by se mi lišil název property od prvního parametru této vazby. Všechny property s takovou vazbou mají u mě zbytečně dlouhou a opakující se konstrukci:

/**
 * @property BaseEntity $ancestor m:hasOne(ancestor)
 * @property BaseEntity $descendant m:hasOne(descendant)
 */

Bylo by možné si nastavit výchozí hodnoty u takové vazby? V tomto případě rovnu názvu samotné property?


Ještě dodám, že by v takovém případě bylo potřeba propašovat mapper do parseru tak, aby se název property korektně přeložil z např. myColumn na my_column v závislosti právě na mapperu.

@achtan

This comment has been minimized.

Show comment
Hide comment
@achtan

achtan Oct 10, 2014

+1 ja som sa presne toto uz raz pokusal pretlacit, sand sa to tera podari! :)

achtan commented Oct 10, 2014

+1 ja som sa presne toto uz raz pokusal pretlacit, sand sa to tera podari! :)

@castamir

This comment has been minimized.

Show comment
Hide comment
@castamir

castamir Oct 10, 2014

Collaborator

přidán dodatek ohledně překladu názvu property na databázový sloupec

Collaborator

castamir commented Oct 10, 2014

přidán dodatek ohledně překladu názvu property na databázový sloupec

@Tharos

This comment has been minimized.

Show comment
Hide comment
@Tharos

Tharos Oct 10, 2014

Owner

Já nejsem proti, ale měli bychom to nějak rozumně vymyslet. Nerad bych kvůli tomu udělal nějaký hluboký BC break. Také bych byl nerad, aby to rozšířilo rozhraní IMapper (třeba o další parametr u vybraných metod), protože jeho složitost už mi přijde na hraně.

Zamyslím se, jak by tohle mohlo jít elegantně vyřešit a zároveň cestou nejmenšího odporu.

Owner

Tharos commented Oct 10, 2014

Já nejsem proti, ale měli bychom to nějak rozumně vymyslet. Nerad bych kvůli tomu udělal nějaký hluboký BC break. Také bych byl nerad, aby to rozšířilo rozhraní IMapper (třeba o další parametr u vybraných metod), protože jeho složitost už mi přijde na hraně.

Zamyslím se, jak by tohle mohlo jít elegantně vyřešit a zároveň cestou nejmenšího odporu.

@Tharos Tharos added the RFC label Oct 10, 2014

@castamir

This comment has been minimized.

Show comment
Hide comment
@castamir

castamir Nov 2, 2015

Collaborator

Já myslím, že tam není potřeba nic zvláštního vymýšlet... :D

Mám-li např. vazbu

/**
 * @property Author $author m:hasOne
 * @property Author $anotherAuthor m:hasOne
 */

pak bych ocekaval vychozi hodnoty pro nazev sloupce: author resp. another_author (dle mapovaci konvence field->column, kterou se to stejne prohani jiz nyni) a pro tabulky v obou pripadech author (dle mapovani z EntityClass na tabulky)

Ano, bude to BC break, protoze se zmeni vychozi hodnota, ale v praxi tam stejne vsichni maji

/**
 * @property Author $author m:hasOne
 * @property Author $anotherAuthor m:hasOne(another_author)
 */

a pokud tam nekdo ma neco jineho, tak ma stejne uplne jiny, svuj vlastni specificky nazev, ktery tam musi ponechat nezavisle na teto zmene, takze se ho to nedotkne...

U ostatnich vazeb to asi nebude tak horke, ale u te HasOne by se to docela hodilo. Ja to ted sice resim pres life-templates v phpstormu, ale to taky neni uplne to prave orechove... nechci to tam mit. Jedine, kde mi to vlastne prichazi v uvahu a kde bych to teoreticky chtel doplnovat, tak je u vazby HasMany a to u nazvu propojovaci tabulky (obcas propojuju 2 tabulky s dlouhymi nazvy, cimz ten problem dlouhych nazvu jeste zhorsim :D)

Collaborator

castamir commented Nov 2, 2015

Já myslím, že tam není potřeba nic zvláštního vymýšlet... :D

Mám-li např. vazbu

/**
 * @property Author $author m:hasOne
 * @property Author $anotherAuthor m:hasOne
 */

pak bych ocekaval vychozi hodnoty pro nazev sloupce: author resp. another_author (dle mapovaci konvence field->column, kterou se to stejne prohani jiz nyni) a pro tabulky v obou pripadech author (dle mapovani z EntityClass na tabulky)

Ano, bude to BC break, protoze se zmeni vychozi hodnota, ale v praxi tam stejne vsichni maji

/**
 * @property Author $author m:hasOne
 * @property Author $anotherAuthor m:hasOne(another_author)
 */

a pokud tam nekdo ma neco jineho, tak ma stejne uplne jiny, svuj vlastni specificky nazev, ktery tam musi ponechat nezavisle na teto zmene, takze se ho to nedotkne...

U ostatnich vazeb to asi nebude tak horke, ale u te HasOne by se to docela hodilo. Ja to ted sice resim pres life-templates v phpstormu, ale to taky neni uplne to prave orechove... nechci to tam mit. Jedine, kde mi to vlastne prichazi v uvahu a kde bych to teoreticky chtel doplnovat, tak je u vazby HasMany a to u nazvu propojovaci tabulky (obcas propojuju 2 tabulky s dlouhymi nazvy, cimz ten problem dlouhych nazvu jeste zhorsim :D)

@Tharos Tharos added Approved feature and removed RFC labels Nov 4, 2015

@castamir castamir self-assigned this Feb 17, 2016

@castamir castamir added this to the v3.0 milestone Feb 21, 2016

@castamir

This comment has been minimized.

Show comment
Hide comment
@castamir

castamir Feb 29, 2016

Collaborator

je to BC Break - odlozeno

Collaborator

castamir commented Feb 29, 2016

je to BC Break - odlozeno

@castamir castamir removed this from the v3.0 milestone Feb 29, 2016

@janpecha janpecha added this to the Version 3.3.0 milestone Apr 15, 2018

@janpecha

This comment has been minimized.

Show comment
Hide comment
@janpecha

janpecha Apr 24, 2018

Collaborator

Jen si tu odložím odkaz na forum, kde se tohle taky kdysi diskutovalo https://forum.dibiphp.com/cs/14592-lean-mapper-tenke-orm-nad-dibi?p=18#p115003

Collaborator

janpecha commented Apr 24, 2018

Jen si tu odložím odkaz na forum, kde se tohle taky kdysi diskutovalo https://forum.dibiphp.com/cs/14592-lean-mapper-tenke-orm-nad-dibi?p=18#p115003

@janpecha

This comment has been minimized.

Show comment
Hide comment
@janpecha

janpecha Jul 8, 2018

Collaborator

Menší souhrn a možnosti řešení.

Aktuální stav

Řešení

V podstatě jediné řešení je rozšířit metodu IMapper::getRelationshipColumn o nové parametry, které zprostředkují mapperu potřebné informace. Dobře to kdysi shrnul Tharos na fóru. Možnosti jsou následující:

  1. přidat nepovinné parametry $entityClass a $property (getRelationshipColumn($sourceTable, $targetTable, $entityClass = null, $property = null)) - ale jak už psal Tharos ve zmiňovaném příspěvku, ty parametry by byly takové trochu divné

  2. přidat nepovinný parametr $relationshipName (getRelationshipColumn($sourceTable, $targetTable, $relationshipName = null)) s názvem vazby

    • uživatel se může rozhodnout jestli název vazby mapperu předá, nebo ne
    • mapper má volnou ruku v tom, jestli bude brát na název vazby ohled, či nikoli
    • pro hasOne by výchozí hodnotou $relationshipName mohl být název položky
    • pro ostatní typy vazeb by se $relationshipName nepředávalo
    • toto řešení je připraveno v PR #127
  3. to samé jako 2) ale m:hasOne by bylo navíc rozšířeno o novou syntaxi, pomocí které by měl uživatel možnost ručně název vazby dospecifikovat (@property Author $maintainer m:hasOne(@maintainer))

Osobně bych byl ze začátku pro možnost 2), později by se to mohlo rozšířit o 3) pokud by to bylo potřeba.


Ať už zvolíme jakékoli řešení, bude to velký BC break, protože rozbijeme rozhraní IMapper a tím i všechny uživatelské implementace (Declaration of *::getRelationshipColumn(...) must be compatible with IMapper::getRelationshipColumn(...)). Řešit by se to zatím dalo tak, že $relationshipName nebude uvedeno mezi parametry, ale budeme ho v DefaultMapper vytahovat pomocí func_get_arg (viz PR #127). S reálnou úpravou rozhraní by se počkalo do verze 4.x.

Collaborator

janpecha commented Jul 8, 2018

Menší souhrn a možnosti řešení.

Aktuální stav

Řešení

V podstatě jediné řešení je rozšířit metodu IMapper::getRelationshipColumn o nové parametry, které zprostředkují mapperu potřebné informace. Dobře to kdysi shrnul Tharos na fóru. Možnosti jsou následující:

  1. přidat nepovinné parametry $entityClass a $property (getRelationshipColumn($sourceTable, $targetTable, $entityClass = null, $property = null)) - ale jak už psal Tharos ve zmiňovaném příspěvku, ty parametry by byly takové trochu divné

  2. přidat nepovinný parametr $relationshipName (getRelationshipColumn($sourceTable, $targetTable, $relationshipName = null)) s názvem vazby

    • uživatel se může rozhodnout jestli název vazby mapperu předá, nebo ne
    • mapper má volnou ruku v tom, jestli bude brát na název vazby ohled, či nikoli
    • pro hasOne by výchozí hodnotou $relationshipName mohl být název položky
    • pro ostatní typy vazeb by se $relationshipName nepředávalo
    • toto řešení je připraveno v PR #127
  3. to samé jako 2) ale m:hasOne by bylo navíc rozšířeno o novou syntaxi, pomocí které by měl uživatel možnost ručně název vazby dospecifikovat (@property Author $maintainer m:hasOne(@maintainer))

Osobně bych byl ze začátku pro možnost 2), později by se to mohlo rozšířit o 3) pokud by to bylo potřeba.


Ať už zvolíme jakékoli řešení, bude to velký BC break, protože rozbijeme rozhraní IMapper a tím i všechny uživatelské implementace (Declaration of *::getRelationshipColumn(...) must be compatible with IMapper::getRelationshipColumn(...)). Řešit by se to zatím dalo tak, že $relationshipName nebude uvedeno mezi parametry, ale budeme ho v DefaultMapper vytahovat pomocí func_get_arg (viz PR #127). S reálnou úpravou rozhraní by se počkalo do verze 4.x.

janpecha added a commit to inlm/LeanMapper that referenced this issue Jul 19, 2018

Changed default column for m:hasOne (see Tharos#77)
- IMapper: added optional parameter $relationshipName for getRelationshipColumn()
- DefaultMapper: uses $relationshipName instead name of target table

janpecha added a commit that referenced this issue Jul 19, 2018

Changed default column for m:hasOne (see #77)
- IMapper: added optional parameter $relationshipName for getRelationshipColumn()
- DefaultMapper: uses $relationshipName instead name of target table

@janpecha janpecha modified the milestones: Version 3.3.0, Version 4.0.0 Jul 20, 2018

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment