Nette\Database a DiscoveredReflexion na linux serveru

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

Po domluvě s hrachem na jabberu postuju tento problém při práci s databází za využití DiscoveredReflexion. Problém se projeví na linux serveru při získání dat z referenční tabulky přes cizý klíč. Problém je v tom, že používám camelcase syntaxi názvů tabulek a na linux serveru si to s tím neumí poradit.

Pro příklad pokud procházím tabulkou aclPermission, která má klíč aclResourceID do tabulky aclResource, tak při procházení hodnotami toto skončí chybou „No reference found for“.

foreach ($permissions as $permission) {
   $permission->aclResource->name;
}

Tabulky vypadají takto:

CREATE TABLE IF NOT EXISTS `aclPermission` (
  `aclPermissionID` int(11) NOT NULL AUTO_INCREMENT,
  `aclResourceID` int(11) NOT NULL,
  `aclRoleID` int(11) NOT NULL,
  `aclActionID` int(11) NOT NULL,
  `allowed` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`aclPermissionID`),
  KEY `fk_aclPermission_aclResource1_idx` (`aclResourceID`),
  KEY `fk_aclPermission_aclRole1_idx` (`aclRoleID`),
  KEY `fk_aclPermission_aclAction1_idx` (`aclActionID`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=23 ;

CREATE TABLE IF NOT EXISTS `aclResource` (
  `aclResourceID` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) COLLATE utf8_czech_ci NOT NULL COMMENT 'zdroje pro oprávnění (moduly)',
  PRIMARY KEY (`aclResourceID`),
  UNIQUE KEY `name_UNIQUE` (`name`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=13 ;

Editoval ViPEr*CZ* (1. 9. 2012 21:31)

hrach
Člen | 1834
+
0
-

hm, v dumpu chybi jeste ty cizi klice, ale uz asi vim kde je chyba…

hrach
Člen | 1834
+
0
-

Zkus pls https://github.com/…esensitivity
Jeste budu muset ten test zkusit na linux masine. :) Pripadne dofixovat, aby test prosel :)

ViPEr*CZ*
Člen | 809
+
0
-

Zdar, tak ten původní problém už zmizel. Ale našel jsem další, který končí stejnou chybou. Teď se nekoukám do referenční tabulky jako před tím přes ActiveRow, ale dotazuji se přes select() a to takto například:

$shared = $this->database->table('calendarShare')
		->select("calendarEvent.startDate AS startDate, calendarShare.*")
		->where("shareID = ?", $userID)
		->where("calendarEvent.startDate >= ?, $date)
		->order("calendarEvent.calendarRepeatEventID ASC")
		->limit($limit, $offset);

Tady to skončí opět s chybou No reference found for $calendarshare->calendarEvent.

hrach
Člen | 1834
+
0
-

V pullu uz fixed :)

ViPEr*CZ*
Člen | 809
+
0
-

hrach napsal(a):

V pullu uz fixed :)

Super, díky. ;-)

PS: už ozkoušeno a problémy, které jsem uváděl jsou OK.

Editoval ViPEr*CZ* (7. 9. 2012 15:24)