vrana / notorm

NotORM - PHP library for simple reading data from the database
http://www.notorm.com/
861 stars 158 forks source link

[caching enabled] Error when quering a NotORM_Row this way $var->remote_tbl['col'] (after cache is built) #63

Open twicejr opened 11 years ago

twicejr commented 11 years ago
$orm = new NotORM($pdo, null, new NotORM_Cache_Session());

    ?><pre><?php

    foreach($orm->lean_route()->order('lean_controller.name')
        as /*@var $route NotORM_Row */ $route)
    {
        echo 'route_id:' . $route['id']
            . ' and controller '. $route->lean_controller['name']  //Exception occurs here when caching
            . PHP_EOL;
    }
CREATE TABLE `lean_controller` (
  `id` INT(10) UNSIGNED NULL AUTO_INCREMENT,
  `name` VARCHAR(512) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

CREATE TABLE `lean_route` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `url` VARCHAR(255) NOT NULL,
  `lean_controller_id` INT(10) UNSIGNED NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `url-controller_id` (`url`, `lean_controller_id`),
  CONSTRAINT `lean_controller_id` FOREIGN KEY (`lean_controller_id`) REFERENCES `lean_controller` (`id`) ON UPDATE NO ACTION ON DELETE NO ACTION
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

[exception trace info]

(exception) Undefined index: lean_controller_id

+0.011938 (exception) Undefined index: lean_controller_id

0 /var/www/lean/sys/vendor/notorm/NotORM/Row.php(159): {closure}(8, 'Undefined index...', '/var/www/lean/s...', 159, Array)

1 /var/www/lean/sys/vendor/notorm/NotORM/Row.php(32): NotORM_Row->offsetGet('lean_controller...')

2 /var/www/lean/index.php(49): NotORM_Row->__get('lean_controller')

3 {main}

/var/www/lean/sys/class/app.php:22 - Debug::message /var/www/lean/index.php:65 - App::showException

+0.011722 Query:

SELECT lean_route.* FROM lean_route LEFT JOIN lean_controller ON lean_route.lean_controller_id = lean_controller.id ORDER BY lean_controller.name

/var/www/lean/mod/database/class/pdo/wrapper.php:7 - Debug::message /var/www/lean/sys/vendor/notorm/NotORM/Result.php:158 - PDOWrapper::prepare /var/www/lean/sys/vendor/notorm/NotORM/Result.php:580 - NotORM_Result::query /var/www/lean/sys/vendor/notorm/NotORM/Result.php:725 - NotORM_Result::execute /var/www/lean/sys/vendor/notorm/NotORM/Row.php:118 - NotORM_Result::offsetGet /var/www/lean/sys/vendor/notorm/NotORM/Row.php:155 - NotORM_Row::access /var/www/lean/sys/vendor/notorm/NotORM/Row.php:32 - NotORM_Row::offsetGet /var/www/lean/index.php:49 - NotORM_Row::__get

+0.011054 Query:

SELECT lean_route.id, lean_route.url FROM lean_route LEFT JOIN lean_controller ON lean_route.lean_controller_id = lean_controller.id ORDER BY lean_controller.name

/var/www/lean/mod/database/class/pdo/wrapper.php:7 - Debug::message /var/www/lean/sys/vendor/notorm/NotORM/Result.php:158 - PDOWrapper::prepare /var/www/lean/sys/vendor/notorm/NotORM/Result.php:580 - NotORM_Result::query /var/www/lean/sys/vendor/notorm/NotORM/Result.php:674 - NotORM_Result::execute /var/www/lean/index.php:46 - NotORM_Result::rewind

vrana commented 11 years ago

I can reproduce this. One problem is that the cache key is just the where condition. Joins should be included in it. Second problem is that accessing a not-fetched column should refetch the whole result.