Získat jméno tabulky z ActiveRow
- m.brecher
- Generous Backer | 871
Ahoj,
potřeboval bych poradit od znalců Nette Database. Zkouším, jak získat jméno tabulky z objektu Nette\Database\Table\ActiveRow. Vyzkoušel jsem toto a funguje to:
$tableName = $row->getTable()->getName(); // kde $row je ActiveRow nějaké tabulky
Metodu Selection::getTable() jsem našel v dokumentaci API Nette Databáze zde https://api.nette.org/…tiveRow.html#…, kde je ale tato metoda označená jako internal.
Mohu bez obav tuto metodu používat, i když je internal, nehrozí v budoucnu, že by nebyla veřejně přístupná? Nebo existuje jiný lepší způsob jak jméno tabulky získat?
Napadlo mne, že by se možná hodilo přidat do veřejného API ActiveRow metodu getTableName(), která by zapouzdřila funkcionalitu getTable()->getName() a bezpochyby by našla svoje použití v praxi.
Díky předem za komentáře.
- Robin Martinez
- Člen | 89
je internal, ale je public? Nette pripadne v novych verzich oznacuje funkce jako deprecated, takze bych se asi nebal. Ale treba me nekdo opravi
Edit: za minus diky, ale jak jsem napsal – byl bych rad, aby nekdo dovysvetlil. Nevim, jestli jsem nenapsal kravinu
Editoval Robin Martinez (29. 7. 2022 6:37)
- petr.pavel
- Člen | 535
Když je internal, tak ji imho nikdo nebude označovat za deprecated, protože není určena k použití zvenku. Technicky to jde, ale autor to povolil z nouze.
@m.brecher: K čemu potřebuješ vědět, z jaké tabulky je řádka v ActiveRow?
- Robin Martinez
- Člen | 89
Jasne, nemyslel jsem asi vylozene deprecated (u internal to fakt nedava asi smysl), ale aby casem internal nebyla zaroven zmenena na private (nekoukal jsem, jak se ted pouziva jako public). To jedine me napadlo, ze by se casem stalo
Editoval Robin Martinez (29. 7. 2022 11:33)
- m.brecher
- Generous Backer | 871
Ahoj @petrpavel a @RobinMartinez
píšu si takové menší CMSko, kde je několik tabulek s obsahem jako article, category, project apod… a při zpracování provádím abstrakci, kdy se z těchto tabulek získávají záznamy do společného ActivRow řádku $content. Zpracování je společné, ale v jednom místě potřebuji znát z jaké konkrétní tabulky ten řádek je.
Ale ono to jde navrhnout lépe tak, že si název tabulky předám explicitně a nepotřebuji jméno tabulky tahat z ActiveRow objektu.
Potvrzuje se pravidlo, že když je člověk tlačen do nestandartních postupů, je vhodné si projít analýzu a zlepšit návrh struktury kódu. Obvykle jsou tlaky na nestandartní postupy v kódu způsobeny nedotaženou analýzou.
- Robin Martinez
- Člen | 89
Ac souhlasim s tim, ze to jde navrhnout lepe, tak na druhou stranu zkratka ActiveRow (zatim) nabizi funkci pro ziskani tabulky, takze proc ne?
- Kamil Valenta
- Člen | 820
Protože internal metoda není součástí veřejného API a sahat se na ni
nemá. Nikdo nebude nikdy cítit potřebu držet záruku, že se metoda
v rámci refactoringu mlčky nepřejmenuje. Když už na tu metodu sahat, tak
ne takto přímo, ale zapouzdřeně přes vlastní objekt, aby se to
v případě změny upravilo na jednom místě.
Ale: také si myslím, že ve chvíli, kdy ActiveRow vznikala, muselo být
jméno tabulky známé. A od té chvíle si ho s sebou můžu tahat…