Nette\Database join (Column not found)
- Tom1141
- Člen | 27
PHP 5.4.3, Nette 2.0.7
Prosím vás vedeli by ste mi poradiť ako správne zapísať tento SQL príkaz pomocou Nette\Database?
SELECT id, username
FROM table1 JOIN table2 ON table1.id = table2.attr1
WHERE
table2.attr2 = $val
Príkaz, čo som vytvoril, je nefunkčný:
$this->getTable()->select('id', 'username')->where("table2.attr2 = $val")
Chyba:
Column not found: 1054 Unknown column 'table1.table2_id' in 'on clause'
– atribút table2_id
tam nemám, vyzerá to tak že Nette si ho
vytvoril sám.
Z pomoc vopred ďakujem.
Pozn.: V table2
sú atribúty attr1
,
attr2
PFK.
Editoval Tom1141 (4. 2. 2013 13:33)
- Petr Hudík
- Člen | 49
Nejsem si jistý, že jsem úplně pochopil danou strukturu tabulek, tak možná úplně ustřelím úplně špatně. Pomohly by bližší informace, co se snažíš docílit, schéma db, apod.
Předpokládám, že v tabulce1 máš uživatele, pokud každý uživatel
má nejvýše jeden řádek v tabulce2, zvážil bych změnu návrhu db
schématu, aby v table1
byl sloupec table2_id
.
Pokud každý uživatel z tabulky1 může mít více spojení v tabulce2, tak bych (opět) zvážil změnu schématu, tentokrát, aby v tabulce2 byl sloupec table1_id. (za předpokladu, že ID je primární klíč tabulky1).
V tomto případě jsou konvence velice důležité, je jedno jaké zvolíš, výchozí však jsou, že cizí klíč tabulky je označen jménem tabulky podtržítkem a následně primárním klíčem dané tabulky např. table_id, nebo users_id. Můžeš, však použít i jiné konvence. Nezapomeň, že tyto spojení fungují, pouze pokud používáš cizí klíče.
Editoval Petr Hudík (4. 2. 2013 13:56)
- Tom1141
- Člen | 27
Snažím sa o vytvorenie jednoduchého systému, v ktorom si bude môcť
používateľ pridať iných používateľov medzi priateľov. Mám vytvorené
2 tabuľky, User
a Relation
, v User
sú
informácie o užívateľoch a Relation
udáva vzťah, kto je
s kým priateľ. Tabuľka Relation
má atribúty:
id1
, id2
, direction
. Atribúty
id1
, id2
sú PFK, direction
určuje smer
vzťahu (1. žiada 2. / 2. žiada 1. / 1. a 2. sú priatelia). Potrebujem
teda napríklad v jednej funkcii vypísať všetkých ľudí, s ktorými je
daný užívateľ priateľ. Jediná možnosť v tomto prípade je teda vyššie
spomenutý príkaz.
- Petr Hudík
- Člen | 49
Děkuji za upřesnění. Změna struktury samozřejmě není nutná. V tom případě by to mělo být jednoduché:
<?php
// $user = $db->table('user')->get($id);
$friends = $user->related('relation', 'id2')
?>
a pak si je v šablně můžu vypsat:
{foreach $friends as $friend}
...
{/foreach}
(Psáno z hlavy, tak snad tam nebude nějaká bota). Je to to co jsi potřeboval?