2016-01-24 4 views
1

Я пытаюсь сохранить объект базы данных из (0) плагина компонента в CakePHP Cache.CakePHP 3: Кэширование объекта базы данных в компоненте

Это работает (обратите внимание на ToArray())

 $domains = Cache::read('domains', 'long'); 

     if ($domains === false) { 

      $domainsTable = TableRegistry::get('DomainManager.Domains'); 
      $domains = $domainsTable->find('all', ['fields' => ['id', 'name']]); 
      $domains = $domains->toArray(); 

      Cache::write('domains', $domains, 'long'); 
      return $domains; 
     } 

Но это не удается:

 $domains = Cache::read('domains', 'long'); 

     if ($domains === false) { 

     $domainsTable = TableRegistry::get('DomainManager.Domains'); 
     $domains = $domainsTable->find('all', ['fields' => ['id', 'name']]); 

     Cache::write('domains', $domains, 'long'); 
     return $domains; 
    } 

Ошибка дается от CakePHP является Ошибка: Вы не можете сериализовать или десериализации экземпляры PDO

Извините, если я просто делаю что-то неправильно, я просто переключился m Cake2 to Cake3 и ничего не нашел в Документации.

Спасибо за любые клеи!

ответ

1

Функция не возвращает результаты, она возвращает объект запроса, который вы можете использовать для получения результатов. Вызов toArray на этом будет извлекать все сущности и предоставить вам что-то, что вы можете кэшировать. (Это может сбивать с толку, так как toArray также используется для преобразования объектов в массивы в других ситуациях.)

+0

Привет, Грег, спасибо за ваш ответ. Но не содержит ли CakePHP документация (http://book.cakephp.org/3.0/en/core-libraries/caching.html#writing-to-a-cache) «Cache :: write() может хранить любой тип объекта и идеально подходит для хранения результатов поиска моделей « или это означает, что в кеш могут храниться только массивы? Возможно, я просто неправильно понимаю документацию по этому вопросу. – Kneecht

+0

«Результаты» обычно означают строки, возвращаемые базой данных. 'find' не возвращает строки, он возвращает объект запроса, который может использоваться для извлечения строк различными способами. Вы можете хранить много вещей в кеше, но объекты запросов не являются одним из них. –

+0

Хорошо, спасибо! :-) Похоже, я должен еще раз взглянуть на новый ORM. – Kneecht