Chyba v Nette\Database – Více sloupců vedoucí na jednu tabulku – Article(inserted_by, modified_by)

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

Prosím o radu, případně řešení:

Tabulka „article“:

  • id
  • title
  • content
  • inserted_by (ref na user.id)
  • modified_by (ref na user.id)

Tabulka „user“:

  • id
  • fullname

Verze Nette: Dev Nightbuild z 27. 12. 2011 pro PHP 5.3
Verze PHP: 5.3

Využívám Nette\Database:

<?php
...
$article = $database->table("article")->get($id);
echo $article->title . "<br />";
echo "Vložil: " . $article->ref("user", "inserted_by")->fullname . "<br />"; // Má se vrátit uživatel ID 1
echo "Změnil: " . $article->ref("user", "modified_by")->fullname . "<br />"; // Má se vrátit uživatel ID 2
?>

V databázi je např. inserted_by ID 1 a modified_by ID 2

Položené dotazy:

SELECT * FROM `article` WHERE `id` = 53;
SELECT * FROM `user` WHERE `user`.`id` IN(1);

Zkrátka u sloupce changed_by se nevybere uživatel a tak mi to na tom řádku hlásí Notice „Trying to get property of non-object“, protože

$article->ref("user", "modified_by")

nevrátí ActiveRow, ale null, protože uživatel s ID 2 nebyl ani dotázán.

Je jedno, jestli používám DiscoveryReflection, nebo ConventionalReflection (jako v případě výše). Nevím si rady, poradíte mi prosím někdo, jak na to? Nechce se mi to přepisovat do SQL.

Děkuji.

hrach
Člen | 1834
+
0
-

Jakou mas verzi nette? Neco podobneho sem myslel, ze uz je opravene :/

daniel.mejta
Člen | 21
+
0
-

hrach napsal(a):

Jakou mas verzi nette? Neco podobneho sem myslel, ze uz je opravene :/

Dnes jsem stahoval nightbuild :(

Pokud se budete chtít podívat na testovací projekt, je ke stažení:
TestNetteDatabase.zip

Edit: Nette Framework 2.0-dev (Nightly Build) pro PHP 5.3

Editoval daniel.mejta (27. 12. 2011 19:42)

daniel.mejta
Člen | 21
+
0
-

hrach napsal(a):

Jakou mas verzi nette? Neco podobneho sem myslel, ze uz je opravene :/

Tak jsem se díval na github a zjistil jsem, že tvůj commit s opravou se asi nějak nedostal do hlavní větve, nebo co, protože v aktuální verzi oprava není :(

Tak jsem si to upravil a funguje ale doufám, že to někdo do hlavní větve jednou dostane :) Díky za nakopnutí.

hrach
Člen | 1834
+
0
-

Ajo, David si uziva zaslouzenou! dovolenou :)

ViPEr*CZ*
Člen | 813
+
0
-

Jen se chci zeptat už je toto opravené? Zkoušel jsem to na 2.0.3 a neprošlo mi to… stejná chyba :-(

hrach
Člen | 1834
+
0
-

Toto opravene bude, ale mozna mas jiny problem. zkus https://github.com/…-refactoring

ViPEr*CZ*
Člen | 813
+
0
-

Tak tohle moc neozkouším… bych toho musel na zkoušku asi v aplikaci poupravit více… používám 2.0.3 verzi nyní, ve 2.1 bude asi pár změn, které zatím nechci aplikovat.
Pokud je tu ale opraven ten bug výše, objeví se to v 2.0.4, která by mohla být zpětně kompatibilnější s 2.0.3 ?

PS: po vymazání cache mi to naběhlo… ref už mi bere druhý klíč… každopádně změny jsou v plánu až pro 2.1 nebo se již objeví ve verzi 2.0.4 ?

Editoval ViPEr*CZ* (17. 7. 2012 17:05)

hrach
Člen | 1834
+
0
-

Nepředpokládám, že se do 2.0.X něco většího obejví. Změny jsou velké, sice interní, ale David to asi nebude riskovat :)

jtousek
Člen | 951
+
0
-

Ono se v té vývojové větvi i trochu změnilo API. Např. před chvílí jsem zjistil že zmizela metoda Selection::find, kterou jsem používal pro update a delete.

Jsou tam i další změny a BC breaky (byť nepříliš výrazné) takže merge do 2.0.x imho nehrozí.

hrach
Člen | 1834
+
0
-

Jake dalsi bc breaky? :)

jtousek
Člen | 951
+
0
-

Když nic jiného tak prohozené argumenty Selection::__construct. (https://github.com/…2469def04601)

EDIT: I když možná byla moje chyba že jsem to volal přímo. :-)

Editoval jtousek (29. 7. 2012 17:46)