spojení dvou a více tabulek notORM

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

Ahoj, mám stále problém se spojením např. dvou tabulek. Něco jsem tu na fóru našel ale nic mi nepomohlo a určitě to pro vás bude maličkost :)

Mám dvě tabulky users(id,name,login,role_id) a role(role_id,role)
a chci udělat jednoduchý výpis uživatelů: Jan Novák Admin, Michal Černý Uživatel atd.

V modelu mám:

$this->db->users();

Poradíte pls? Díky

Melmen
Člen | 132
+
0
-

Koukal jsi sem? Je to totiž první example použití.
Takže něco ve smyslu

foreach($this->db->users() as $user)
{
echo $user['name']; // uživatelské jméno
echo $user->role['role']; // role uživatele
}
spiider
Člen | 162
+
0
-

Paráda díky potřeboval jsem to na mém příkladě abych pochopil. A teď mám v modelu teda ted foreach a potřebuju data vrátit do presenteru pro vykreslení do tabulky. Nemohl bys pls poradit jak co nejlépe to udělat?
Díky moc

Melmen
Člen | 132
+
0
-

A nebylo by lepší (jednodušší) mít v presenteru něco jako $this->template->users = $this->db()->users();

A pak v šabloně:

{foreach $users as $user}

Vypis tabulky... Data se vypíšou přes {$user['name']} a {$user->role['role']}

{/foreach}
spiider
Člen | 162
+
0
-

Pro výpis používám grid a ten plním právě v presenteru

Melmen
Člen | 132
+
0
-

Grid nepoužívám, s tím ti neporadím.
Pro výpisy tabulek používám DataTables
Je to jednoduchý, založený na jQuery (myslím :D ) Nadefinuju si tabulku do který pošlu data a DataTables se mi postará o všechno ostatní, i o stránkovač.

spiider
Člen | 162
+
0
-

Ok i tak dik, nějak to zkusím vymyslet, jenom se ještě zeptám když po vložení do DB chci získat id právě vloženého řádku, tak sem našel že by to mělo jít pomocí getPrimary() ale nevím jak to použít.
Dík

Melmen
Člen | 132
+
0
-

Nejsem si teďka jistý, ale mrkni (opět) sem na část „Row“.
V posledním řádku se píše: `(string) $row = Get primary key value `
Takže něco na způsob

$primary = (string) $row;
echo $primary;

Ale nezkoušel jsem, jen hádám :)

//EDIT
Teď jsem si všiml, že by to mělo být getPrimary($row);

Editoval Melmen (6. 1. 2012 14:10)

spiider
Člen | 162
+
0
-

To mi nefunguje, asi to mám nějak špatně. Má to:

$row = $this->db->users()->insert($users);
$id = $this->db->getPrimary($row);

ale to píše undefined index id

petr.pavel
Člen | 535
+
0
-

Hodnotu nově vzniklého záznamu najdeš v $row['id'] hned po insertu. Volat nic nemusíš, protože insert() ti ji tam vloží sám.

spiider
Člen | 162
+
0
-

To píše to stejný. Mám to takhle:

$row = $this->db->users()->insert($users);
echo $row['id'];

Ještě jenom info že používám Postgre

Editoval spiider (6. 1. 2012 17:40)

petr.pavel
Člen | 535
+
0
-

Tak to je podstatný detail :-)

Budeš si muset definovat vlastní NotORM_Structure. Stačí podědit NotORM_Structure_Convention nebo NotORM_Structure_Discovery, ale hlavně budeš muset definovat vlastní metodu getSequence(), která ti pro zadaný název tabulky vrátí name of a sequence object.

spiider
Člen | 162
+
0
-

Uz mi to jede diky moc, ještě bych se chtěl zeptat.....používám grid do kterého z modelu pošlu údaje které grid vykreslí. Problém teď mám s tím když chci spojit více tabulek. Když to udělám podle návodu a použiju jak mi psal Melmen

foreach($this->db->users() as $user)
{
	echo $user['name']; // uživatelské jméno
	echo $user->role['role']; // role uživatele
}

Tak já bych potřeboval vrátit z funkce kompletní result ve formátu který vrací např. jednoduchý

return $this->db->users();

Grid vypadá zkráceně takto:

$grid = new \Gridito\Grid($this, $name);
		$grid->setModel(new \Gridito\NotORMGriditoModel(
						$this->model->getUsers()));
$grid->addColumn('fname', _('First name'))->setSortable(true);

Díky za rady