related() skončí chybou „Ambiguous joining column in related call“
- Eda
- Backer | 220
Zdarec.
Zase jsem začal válčit s Nette/Database a narazil jsem na jednu nepříjemnost.
Uvažujme následující schéma:
A kód:
$db = $this->context->database;
foreach($db->table('vozy') as $v)
{
foreach($v->related("vozy_dopravci") as $evd)
{
var_dump($evd->id);
}
}
Vykonávání skončí u funkce related() s chybou „Ambiguous joining column in related call“.
Bohužel nemůžu měnit databázové schéma tak, aby název žádné tabulky nebyl obsažen v názvu jiné, což by se třeba u nového projektu nabízelo jako řešení.
Pro úplnost: používám Nette 2.0.5 pro PHP 5.3.
- duke
- Člen | 650
tweak napsal(a):
on ví, že do tabulky vozy_dopravci .. ale neví klíč v druhý tabulce.. kdyby byla dodržená konvence v pojmenování, tak to funguje bez toho „vuz_id“ ..
Naopak. Neví o kterou tabulku jde, neboť jsou dvě, které vyhovují.
V daném případě je třeba použít related s tečkovou notací
->related('vozy_dopravci.vuz_id')
nebo se dvěma parametry
(v těchto případech nedohledává tabulku přes stripos ze
struktury, ale předpokládá, že mu byl zadán přesný název tabulky). To,
že to umí pracovat se substringem názvu tabulky má své výhody, ale
v tomto konkrétním případě je to překážkou, kterou právě řeší buď
druhý parametr related, nebo tečková notace.
- Eda
- Backer | 220
Hrachu, používám opravdu 2.0.5 (revision f8aa369 released on 2012–08–30).
Přesný obsah DB si můžeš stáhnout tu: http://leteckaposta.cz/392352891
- hrach
- Člen | 1838
Melo by byt fixnute tu: https://github.com/…tte/pull/770
Pokryl jsem to i testem.
Diky za report!