related() skončí chybou „Ambiguous joining column in related call“

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

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:
Obrázek

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.

jtousek
Člen | 951
+
0
-

Problémem bude asi tento řádek. Připadá mi to dost podivné, možná bug.

Eda
Backer | 220
+
0
-

Věřím, že Hrach si s tím poradí :-)

tweak
Člen | 9
+
0
-

Já teda nevím.. ale není to tím, že neví, přes který sloupec spojit?

zkus kouknout na api $throughColumn

Eda
Backer | 220
+
0
-

Vazba bude vždy probíhat přes sloupec vuz_id. Problém je, že skript nepozná, do které tabulky se bude vazbit.

Je ale pravda, že při použití related() s druhým parametrem $v->related("vozy_dopravci", "vuz_id") mi to funguje…

tweak
Člen | 9
+
0
-

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“ ..

jtousek
Člen | 951
+
0
-

Konvence pojmenování nehraje roli, protože používá DiscoveredReflection.

duke
Člen | 650
+
0
-

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.

hrach
Člen | 1834
+
0
-
  • myslel jsem, že tento problém jsem už zafixoval. Používáš doufám 2.0.5 / master.
  • toto by se mělo opravdu samo bez pomoci resolvnout na vozy_dopravci.
  • samozrejme muzes tomu docasne pomoci, ze urcis jasne tabulku a joining sloupec.
tweak
Člen | 9
+
0
-

@duke: tak to se omlouvám, spíš jsem hádal, že to tak je =) ..

Eda
Backer | 220
+
0
-

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

Melo by byt fixnute tu: https://github.com/…tte/pull/770
Pokryl jsem to i testem.
Diky za report!