Nette\Database\Table a spojení tabulek do Gridu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Džůny
Člen | 19
+
0
-

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
+
0
-

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.