Nette\Database\Table a spojení tabulek do Gridu
- Džůny
- Člen | 19
Prosím o radu jak řešit následující problém v Nette\Database\Table. Mám v DB tabulky:
user: id, email, city_id | cizí klíč: city_id => city.id
a
city: id, name
Tabulku user vykresluji v Gridu (TwiGrid):
protected function build()
{
$this->setPrimaryKey('id');
$this->addColumn('id', 'ID');
$this->addColumn('email', 'E-Mail')->setSortable();
$this->addColumn('city_id', 'Město')->setSortable();
$this->setDataLoader(function () {
return $this->userFacade->getAll();
});
}
Potřebuji do Gridu místo user.city_id
dostat
city.name
. V šabloně to pomocí related()
jde:
{define body-cell-city}
<td>{$record->city->name}</td>
{/define}
Jenže „datově“ v Gridu pořád zůstává (logicky)
city_id
, z čehož plynou další nepohodlnosti (řazení není
dle abecedy jak by uživatel čekal, ale podle ID, při inline editaci se
objeví ID a ne jméno města,…). Zkoušel jsem si poskládat dotaz pomocí backjoin,
ale neúspěšně,
dostávám No reference found for $user->related(city).
Vím že si vždycky můžu napsat dotaz, spojit tabulky a vybrat co potřebuji. Ale chtěl bych to vyřešit v NDT (ač je to nejspíš proti její filosofii).
Děkuji za nápady. :)
Editoval Džůny (27. 7. 2015 18:48)
- Felix
- Nette Core | 1247
Neznam presne TwigGrid
, ale v NDB by melo jit.
$db->table('user')
->select('user.*')
->select('city.name AS cityName')
A pak v gridu pouzit sloupecek cityName? Nebo jaky jsi mel problem, tohle zrovna backjoin neni, ten se pouziva u m:1, 1:m vazeb.
Pripadne kdyby to byl koncepcni problem, tak doporucuju si vytvaret pro gridy views, je to skvela vec.