ublaboo/datagrid – dve hodnoty z jine tabulky v jednom sloupci
- papirek
- Člen | 8
Ahoj,
prosim poradite nekdo, je to urcite hloupost, ale uz nevim co zkusit…
potrebuji v contribute/datagrid udelat sloupec, ktery obsahuje jmeno a prijmeni
z jine (napojene cizim klicem) tabulky
$grid->addColumnText('obchodnik', 'Obchodník', 'users.name:user_id');
myslel jsem, ze bych to udelal pres setRender(), takto:
$grid->addColumnText('obchodnik', 'Obchodník', 'users.name:user_id')
->setRenderer(function($item) {
return $item->name.' '.$item->surname;
});
ale to mi haze chybu: Cannot read an undeclared column ‚name‘.
data taham z tabulky orders, kde mam sloupec user_id a nastaveny cizi klic na
tabulku users, kde jsou sloupce name a surname, ktere potrebuji zobrazit
v jednom sloupci v tabulce…
$grid->setDataSource($this->explorer->table('orders'));
- Kamil Valenta
- Člen | 815
Ten sloupec v orders by měl být users_id, nebo ponechat jméno sloupce a
přejmenovat tabulku na user.
A pak stačí jen „users.name“. A druhý sloupec „users.surname“.
Trochu problém je, že to má být jeden column, protože setRenderer
neovlivní JOIN. Takže je potřeba v Datasource v té selectioně v
->select() explicitně říct, co vše bude potřeba. Ale dost často se pak
člověk zamotá, když nad sloupci potřebuje filtry.
Spolehlivé je:
- pokud není obchodníků mnoho, tak si je vytáhnout samostatně jako [id ⇒ jmeno+prijmeni] a použít je v setReplacement
nebo
- v datasource použít pohled a tam si to joinout dle potřeby…
Editoval Kamil Valenta (25. 10. 2022 20:13)
- Marek Bartoš
- Nette Blogger | 1263
Tyhle automatický datasources jsou hrozný zlo v okamžiku, kdy člověk chce něco jen trochu komplikovanýho… a k tomu je datasource roztahaný po celém souboru a staticky analyzovatelný.
Šel bych cestou implementace vlastního IDataSource a zredukoval jej na callback, který přijme filter, limit a sort a vrátí data. Něco jako má nextras/datagrid
Editoval Marek Bartoš (25. 10. 2022 20:28)
- turbo80
- Člen | 50
papirek napsal(a):
Ahoj,
prosim poradite nekdo, je to urcite hloupost, ale uz nevim co zkusit…
potrebuji v contribute/datagrid udelat sloupec, ktery obsahuje jmeno a prijmeni z jine (napojene cizim klicem) tabulky$grid->addColumnText('obchodnik', 'Obchodník', 'users.name:user_id');
myslel jsem, ze bych to udelal pres setRender(), takto:
$grid->addColumnText('obchodnik', 'Obchodník', 'users.name:user_id') ->setRenderer(function($item) { return $item->name.' '.$item->surname; });
ale to mi haze chybu: Cannot read an undeclared column ‚name‘.
data taham z tabulky orders, kde mam sloupec user_id a nastaveny cizi klic na tabulku users, kde jsou sloupce name a surname, ktere potrebuji zobrazit v jednom sloupci v tabulce…$grid->setDataSource($this->explorer->table('orders'));
Resil bych to na strane Modelu
<?php
->select('CONCAT(name," ",username) AS obchodnik')
# a takhle v datagridu
$grid->addColumnText('obchodnik', 'Obchodník');
?>