Skip to content
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

DoctrineDataSource support #26

Closed
juniwalk opened this issue Mar 9, 2015 · 31 comments
Closed

DoctrineDataSource support #26

juniwalk opened this issue Mar 9, 2015 · 31 comments

Comments

@juniwalk
Copy link
Contributor

juniwalk commented Mar 9, 2015

Dobrý den,
je v plánu přidat podporu pro doctrinu?

Povedlo se mi rozjet data z doctriny prez ArrayDataSource data source ale musel jsem udělat par uprav do BaseGrid.php, bylo by dobré vytáhnout získávání názvů sloupců do IDataSource abych mohl pracovat s objektem implementujícím ArrayAccess.

Pokud by jste zvážil tuto úpravu IDataSource, mohl bych se pokusit DS pro Doctrinu napsat a poslat PR.

@mesour
Copy link
Owner

mesour commented Mar 9, 2015

Dobrý den,

no ArrayDataSource má ale omezené nastavení podmínek. Nejdou zanořovat.

getColumnNames bych mohl přidat, bylo by to čistější :-)

Jinak DoctrineDataSource už vytvořila jedna firma. Sešel jsem se s nimi a
říkali, že pošlou pull request, ale už je to dost dlouho a nic, tak se jich
zeptám a když nic, tak na ně kašlu a něco dáme dohromady ;-)

M.

Dne 9. března 2015 15:27 Martin Procházka notifications@github.com
napsal(a):

Dobrý den,
je v plánu přidat podporu pro doctrinu?

Povedlo se mi rozjet data z doctriny prez ArrayDataSource data source ale
musel jsem udělat par uprav do BaseGrid.php, bylo by dobré vytáhnout
získávání názvů sloupců do IDataSource abych mohl pracovat s objektem
implementujícím ArrayAccess.

Pokud by jste zvážil tuto úpravu IDataSource, mohl bych se pokusit DS pro
Doctrinu napsat a poslat PR.


Reply to this email directly or view it on GitHub
#26.

@juniwalk
Copy link
Contributor Author

juniwalk commented Mar 9, 2015

Dobře, děkuji za rychlou odpověď a za zvážení.

@juniwalk
Copy link
Contributor Author

@mesour Dobrý den, je nějaké info ohledně toho DataSource pro Doctrine?

@mesour
Copy link
Owner

mesour commented May 19, 2015

Dobrý den,

koukal jsem zběžně na ten náhled a určitě by tam bylo potřeba udělat nějaké
úpravy. Nejdůležitější bude, aby to prošlo testy, které jsou zatím napsané
jenom pro DataSourcy. Tohle bylo někdy kolem toho, když jste mi psal.

Nedávno jsem se na to chtěl mrknout, ale už jsem nenašel ten váš náhled,
takže z toho zatím sešlo. Do nové desetinkové verze bych jí už chtěl dát.
Budu rád, když mi pošlete znovu ten náhled. Starý link zdá se nefunguje.

M.

Dne 19. května 2015 14:41 Martin Procházka notifications@github.com
napsal(a):

@mesour https://github.com/mesour Dobrý den, je nějaké info ohledně
toho DataSource pro Doctrine?


Reply to this email directly or view it on GitHub
#26 (comment).

@juniwalk
Copy link
Contributor Author

To protože jsem jej smazal, bylo to velice špatně napsané. Já s Doctrine pořádně neumím, takže asi nebude nejlepší nápad, abych to implementoval já.

@mesour
Copy link
Owner

mesour commented Jun 4, 2015

No koukal jsem na to a ideálně bych to asi udělal přes query builder. Já Doctrine nepoužívám na žádném projektu. Takže kdyby k tomu měl někdo nějaký komentář, tak určitě uvítám jakékoliv nápady, připomínky a kritiku :-)

@juniwalk Jak to myslíš s tím vytáhnutím získávání názvů sloupců do IDataSource? A k čemu je to důležité?

@juniwalk
Copy link
Contributor Author

juniwalk commented Jun 5, 2015

Ják jsem udělal ten DataSource, používal jsem tam přímo entity, tedy objekty ale DataGrid si s objekty nerozumí.

Pravděpodobně to není potřeba, protože bych měl vracet array z QueryBuilder-u.

@mesour
Copy link
Owner

mesour commented Jun 5, 2015

Tak tohle jsem trochu nepochopil. V čem je problém s entitami tedy
objekty... Proč by si s tím Grid jako neměl rozumnět?

Ideální by samozřejmě bylo kdyby to bylo pres entity aby se to pak dalo
plně vyuzit :-) Stejně tak nette data source bude vracet ActiveRow ;-)
On Jun 5, 2015 4:17 PM, "Martin Procházka" notifications@github.com wrote:

Ják jsem udělal ten DataSource, používal jsem tam přímo entity, tedy
objekty ale DataGrid si s objekty nerozumí.

Pravděpodobně to není potřeba, protože bych měl vracet array z
QueryBuilder-u.


Reply to this email directly or view it on GitHub
#26 (comment).

@juniwalk
Copy link
Contributor Author

juniwalk commented Jun 7, 2015

Nejde to, protože by ta entita musela implementovat ArrayAccess :)

@mesour
Copy link
Owner

mesour commented Jun 8, 2015

Jo takhle už to chápu. Grid s daty pracuje jako s polem. Tak se to bude muset nějak upravit a sjednotit, aby bylo možné výsledné data plně využít.

Kdyby někdo měl nápad, jak na to, tak uvítám vše :-) Mě napadlo akorát, že by všechny na fetchAll vracely pole objektů ActiveRow nebo Entit. Akorát pro ArrayDataSource by se to navíc muselo hodit do nějakého ArrayHashe, aby se to sjednotilo.

@juniwalk
Copy link
Contributor Author

juniwalk commented Jun 8, 2015

Ano, sjednocení by to chtělo. Když jsme u toho, k čemu je IDataSource::fetch() metoda? Vím co to dělá a k čemu se to používá, jen nevím proč je to vytaženo do metody zvlášť.

@mesour
Copy link
Owner

mesour commented Jun 8, 2015

Používá se pouze pro zjištění názvů sloupců, pokud nenastavím žádný sloupec, tak si z fetch() vezme array_keys a udělá TextovéSloupce.

Od v2.1 by měl fetch() jít pryč a měla by ho nahradit přímo getColumnNames() nebo něco podobného.

@juniwalk
Copy link
Contributor Author

juniwalk commented Jun 8, 2015

Rozumím, u Doctriny je problém, že potřebuje mit property nastavené jako protected, aby entity fungovali jak měli a potom nejde udělat jednoduché array_keys((array) $entity);, funkce get_object_vars($object) je specifická na scope, takže by se musela volat uvnitř entity.

Jediná možnost, jak tohodle docílit bude asi reflection.

@mesour
Copy link
Owner

mesour commented Jun 9, 2015

Jasně, přes reflection to nebude problém. Tuhle logiku by v sobě měl mít ideálně ten source :-)

Napadlo mě rovnou udělat dva DataSourcy, jeden pro Entitu a druhý pro QueryBuilder ;-) Využije se to?

Vzhledem k tomu, že grid by měl časem být nezávislý na Nette (pouze budou bridge pro Nette). Tak si myslím, že Doctrine DataSource bude potřeba mnohem víc než do teď ;-)

@juniwalk
Copy link
Contributor Author

juniwalk commented Jun 9, 2015

Jak je myšlen ten pro entitu? QueryBuilder je jasný, bez něj se to v podstatě neobejde.

@juniwalk
Copy link
Contributor Author

juniwalk commented Jun 9, 2015

Mimochodem, já pak zkusil začít dělat na novém DataSource využívajícím QueryBuilder, ale ještě jsem pořádně neměl čas k tomu sednout.

Mam jen toto: https://gist.github.com/juniwalk/0d1b71e35742d19afb8f

@mesour
Copy link
Owner

mesour commented Jun 9, 2015

No v podstatě, když nad tím přemýšlím, tak je to blbost. Jak jsem říkal, s Doctrine nepracuji a vím jen základy. Takže byl ten můj komentář asi dost mimo :-D

No asi jinak. QueryBuilder umí nějak vracet výsledky jako pole Entit nebo nějaký ResultSet? Nebo pouze jako pole?

K tvému rozdělanému DataSourcu. Nemám čas to teď podrobněji procházet. Ale třeba pro fetchAll potřebuješ limity i whery, ale pro fetchForExport už potřebuješ jenom whery. Ty třeba v applyLimit nastavuješ limit přímo query builderu. V fetchForExport by limit byl taky, protože se může volat klidně až po tom co grid aplikuje limit. Proto mám třeba zde metodu getSelection, které řeknu, zda chci limity a whery a ona vždy udělá klon a nastaví to co potřebuji ;-)

@juniwalk
Copy link
Contributor Author

juniwalk commented Jun 9, 2015

ve fetchForExport bych udělal clon QB a vymazal z něj limity, není problém. :) QueryBuilder může vracet pole Entity nebo pole Array dat, záleží na té Hydrataci kterou tam uvidíš.

Já tam dal array, protože DataGrid teď nezvládá pracovat přímo s entitami, háže to errory.

@mesour
Copy link
Owner

mesour commented Jun 9, 2015

Aha, pokud z něj lze mazat, tak je to pak vyřešené :-) Ale počítej s tím, že někde budeš chtít vymazat whery, které přidal filtr, ale budeš chtít zachovat ty, které uživatel nastavil ještě před tím, než QueryBuilder poslal DataSourcu.

Nutnost ArrayAccessu odstraním, ale kdy se k tomu dostanu vážně nechci slibovat, mám toho teď nějak moc...

@juniwalk
Copy link
Contributor Author

juniwalk commented Jun 9, 2015

Nic se neděje, též nevím, kdy se dostanu k tomu dodělat ten DataSource.

Tak jako tak to pak bude chtít nechat projít někým zkušeným, napadá mně @fprochazka, když bude tak hodný.

@mesour
Copy link
Owner

mesour commented Jun 9, 2015

Jasně :-)

Myslíš nechat projít vnitřek toho sourcu? To už bychom pak nějak s někým domluvili :-)

@juniwalk
Copy link
Contributor Author

juniwalk commented Jun 9, 2015

Ano, já mám málo zkušeností s Doctrine na to, aby se to dalo považovat za stable.

@juniwalk
Copy link
Contributor Author

Tak jsem dnes zkusil napojit ten kód co jsem posílal sem na jeden z mých projektů a byl jsem mile překvapen, že se mi povedlo to zprovoznit s pouze jedinou úpravou do dataSourcu. :D

Filtrování sice ještě nepůjde, ale to je jasný, není to ani z daleka hotové, :)

@fprochazka
Copy link

@juniwalk kdybys to otevřel jako pullrequest aby se to rozumě komentovat, tak klidně kouknu, jestli tam neuvidím nějaké problémy :)

Btw, hodnoty z Doctrine entity číst buď pomocí ClassMetadata nebo https://github.com/symfony/PropertyAccess.

@juniwalk
Copy link
Contributor Author

@fprochazka Tak PR vytvořeno :)

EDIT: Není to ani zdaleka hotové, s QueryBuilderem se stále seznamuji, hlavně tvoření WHERE podmínek.

@Daaarkling
Copy link

Ahoj, jak to vypadá s Doctrine datasource?

@juniwalk
Copy link
Contributor Author

Zdravím, narazil jsem na menší problém přímo v DataGridu, bude to vyžadovat trochu větší úpravy.

@Daaarkling
Copy link

Ahoj, nějaký pokrok? Potřebuješ s něčím pomoct?

@juniwalk
Copy link
Contributor Author

Ahoj, bohužel nn, makám teď na obrovském projektu a tahám si práci aj domů, vůbec na tohle nemám čas.

@mesour
Copy link
Owner

mesour commented Mar 24, 2016

@Daaarkling @juniwalk: Můžete se inspirovat zde:

V nové verzi jsem to rozdělil na více souborů, ale v podstatě je tam veškerá logika, která je potřeba, jenom to vykuchat a odladit :)

Ale myslím, že nyní už je lepší si počkat na stable a sáhnout rovnou verzi 3.0

@juniwalk
Copy link
Contributor Author

juniwalk commented Jul 27, 2016

DoctrineDataSource je již dostupný ve verzi 3.0, která má stable release. Tento issue už nemá moc smysl.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants