\Nette\Database\Context many to many self join

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

Ako spravím many:many self join ?

Mám tabuľky:
item

  • id
  • name

item_parent

  • parent_id → FK_item_parent_item_parent_id
  • item_id → FK_item_parent_item_item_id

Ako toto vyberiem z databázy ?

David Matějka
Moderator | 6445
+
0
-
  1. cetl sis dokumentaci? https://doc.nette.org/…ase/explorer#…
  2. zkousel si neco vytvorit?
tino415
Člen | 46
+
0
-

Som relatívne nováčik v nette a jedine čo ma napadlo je

<?php
 $city = $hotel
	->related('item_parent', 'item_id')
	->ref('item', 'parent_id');
?>

Len mi ešte nezbehlo ani to prvé related resp ref.
ref mi vráti 0 záznamov a related mi vypíše:
Cannot read an undeclared column ‚id‘.

Editoval tino415 (4. 8. 2015 11:05)

CZechBoY
Člen | 3608
+
0
-

Moc dobře nechápu o co se snažíš.
Dej sem struktury těch tabulek a co se má odkud vybrat.

tino415
Člen | 46
+
0
-

Štrutktúra je uvedená vyššie, mám tabuľku item ktorá má id a name a druhú tabuľku item_parent ktorá ma item_id (id z tabuľky item) parent_id (id z tabuľky item). Som na prvku item a potrebujem získať jeho prvého rodiča,

SELECT * FROM item AS it1
INNER JOIN item_parent AS map ON it1.id = map.item_id
INNER JOIN item AS it2 ON it2.id = map.parent_id
LIMIT 1;

Teraz som to vyriešil cez where, pričom robím dva krát výber HAS_MANY…

CZechBoY
Člen | 3608
+
0
-

Tak napiš řešení pro lidi, kteří narazí na stejný problém. :-)

tino415
Člen | 46
+
0
-

Vyriešil som to tak že si dva krát robím where na wo forme has many, čiže to ide cez dva dotazy, nie cez jeden…

tino415
Člen | 46
+
0
-

Nevie niekto niečo poradiť, furt sa tento problém ku mne vracia, MANY:MANY vzťah používam nejak moc často :D

CZechBoY
Člen | 3608
+
+1
-

Pokud bych měl jen přepsat ten tvůj select tak by to mělo být nějak takto:

$db->table('item')
   ->select(':item_parent(item_id).*')
->select(':item_parent(parent_id):item.*');

Editoval CZechBoY (3. 9. 2015 18:20)

Azathoth
Člen | 495
+
0
-

@tino415 koukám, že tam máš parenta. Jestli z toho plánuješ dělat stromovou strukturu, pak možná bude lepší použít closure table
ale možná to není tvůj případ, nejsem si jistý

tino415
Člen | 46
+
0
-

Ono v podstate keď som si to pozrel item_parent je closure table.