Nette/database/table Jak na backjoin do jiné tabulky?

jAkErCZ
Člen | 321
+
0
-

Zdravím vás,
Jsem začátečník tak bych chtěl trošku pomoci.

Mám Tabulku Company ze které si vytahuji všechny Informace do datagridu ale teď bych potřeboval udělat Join do jiné tabulky kde mi to vytáhne ULR adresy těch firem ( Podotýkám že jich může být více ) A jejich primární klíč je CoompanyID

Dotaz ze kterého si vytahuji všechno

return $this->database2->table(self::TABLE_NAME);

Potřeboval bych tento dotaz zároveň napojit na tabulku CompanyWebPage ze které si chci vytáhnout parametr Uri aby se díky tomu dalo vyhledávat v datagridu…

Předem všem díky za radu či pomoc :)

Editoval jAkErCZ (24. 5. 2017 15:04)

filsedla
Člen | 101
+
0
-

Kdybys chtěl vypsat URL adresy k jedné firmě, volal bys

foreach($companyRow->related('CompanyWebPage') as $webPageRow) ...

Jiná věc je ale hledání v URL adresách. Pro to potřebuješ do základního selection firem dostat

$selection->where(':CompanyWebPage.url', $searchedUrl)

Což je ale ošemetný where, protože ti může zduplikovat řádky z Company.

No, jsou to jenom momentální nápady, nevím jestli to pomůže…

Jaký používáš datagrid?

Mysteria
Člen | 797
+
0
-

Do datagridu bych to zkusil asi nějak takhle:

return $this->database->table('company')->select('company.id, company.name, :companyWebPage.url');
jAkErCZ
Člen | 321
+
0
-

Ano používám nejnovější datagrid…

Ale teď nastala jiná chyba…

Manager.php

public function getComponiesAll()
	{

            $selection = $this->database2->table(self::TABLE_NAME)->select('Company.*, :CompanyWebPage.*');
            return $selection;

	}
Nette\Database\DriverException #23000

SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'ID' in order clause is ambiguous search►

Caused by PDOException
SQL

SELECT `Company`.*, `CompanyWebPage`.*
FROM `Company`
LEFT JOIN `CompanyWebPage` ON `Company`.ID = `CompanyWebPage`.`CompanyID`
ORDER BY ID
LIMIT 10

Jak tohle mám ošetřit? Sice jsem našel nějaké věci kolem tohoto ale přijde mi že to je zbytečně moc dotazů na DB.

Editoval jAkErCZ (25. 5. 2017 13:07)

filsedla
Člen | 101
+
0
-

@jAkErCZ Potřebuješ opravdu selectovat všechna pole z obou tabulek?

$this->database2->table(self::TABLE_NAME)->select('Company.*, :CompanyWebPage.*');

Tady nedávej hvězdičky, ale vypiš sloupce, které potřebuješ tak, abys tam neměl např. 2× id.

jAkErCZ
Člen | 321
+
0
-

V pohodě tohle už sem vyřešil :) a udělal sem to úplně jinak ;)

Zuben45
Člen | 268
+
0
-

Myslím, že tabulku pro url máš špatně navrženou, více položek ke společnosti, kde primární klíč je id společnosti ? Primární klíč by měl být unikátní :)

jAkErCZ
Člen | 321
+
0
-

Tak mám stejný problém ale tentokrát jinde :D

$selection =  $this->database3->table(self::TABLE_WEB_PAGE)->select('WebPage.CustomerID, WebPage.Uri, :Customer.Name');

a mám problém

Nette\InvalidArgumentException

No reference found for $WebPage->related(Customer). search►

Co dělám špatně když chci vytáhnout data z tabulky WebPage a z tabulky Customer jenom Name?

mroz123
Člen | 6
+
+1
-

Pokud máš správně nastavené relace, tj. tabulka Customer obsahuje FK do tabulky WebPage, tak by to fungovat mělo. Ještě můžeš vyzkoušet na serveru smazat cache.