Nette\Database a DiscoveredReflexion na linux serveru
- ViPEr*CZ*
- Člen | 821
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 | 1840
Zkus pls https://github.com/…esensitivity
Jeste budu muset ten test zkusit na linux masine. :) Pripadne dofixovat, aby
test prosel :)
- ViPEr*CZ*
- Člen | 821
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.