CakePHP find возвращает результаты с отсутствующими полями

Мне нужно получить мою User информацию, и когда я позвоню

$this->User->find('first', array('conditions' => array('User.id' => $user_id)));

результат содержит только некоторые поля.

В настоящее время я обновил схему базы данных. На сервере разработки он работает нормально и возвращает все поля, но на рабочем сервере эти новые поля отсутствуют. Эти серверы имеют точно такую ​​же конфигурацию.

Я уже пытался удалить содержимое app/tmp/cache/models и использую механизм File для кэширования.

Файл schema.php обновлен, содержимое файлов в app/tmp/cache/models указывает на то, что эти поля присутствуют, но мне не удалось получить их на рабочем сервере. Единственная разница, возможно, заключается в базе данных и уровне отладки. Я попытался скопировать базу данных и использовать ее с сервером разработки, и это сработало.

Очевидно, я не могу установить для отладки значение 2 на производственном сервере.

Кто-нибудь из вас сталкивался с подобным поведением?

PS Я использую Cake 2.3.3


person Elwhis    schedule 15.05.2013    source источник
comment
Вы уверены, что не получаете кешированные результаты? Если вы добавляете новые записи, вы получаете их в поиске?   -  person Chris    schedule 15.05.2013
comment
Я бы сказал, что Крис прав. удалите содержимое tmp/cache/models, и вы снова сможете работать.   -  person timstermatic    schedule 15.05.2013


Ответы (3)


На самом деле ответ был довольно прост. Мне пришлось удалить не только содержимое app/tmp/models, но что на самом деле заставило его работать, так это удаление содержимого app/tmp/persistent.

person Elwhis    schedule 15.05.2013
comment
Вы также можете просто включить отладку - это должно заставить его каждый раз получать свежий кеш. - person Dave; 15.05.2013
comment
Да, это определенно решило бы проблему, но, поскольку это рабочий сервер, это невозможно. - person Elwhis; 16.05.2013
comment
Это просто PHP - проверьте ?debug=1 и действительный IP-адрес - если это так, установите отладку на 2 - иначе 1... что-то в этом роде. Если вы имеете дело с банковскими счетами или чем-то еще, это, вероятно, не очень хорошая идея, но для большинства сайтов я думаю, что это идеально, так как вы можете легче определять проблемы среди прочего. - person Dave; 16.05.2013

Мой ответ немного отличается от ответа @Elwhis. Я использую Cake 2.4.5. Для меня не было каталога app/tmp/models или app/tmp/persistent. models и persistent были моложе app/tmp/cache. Как и @Elwhis, поиск в каталоге app/tmp/cache/models показал отсутствующие поля, поэтому это сбивало с толку.

Чтобы исправить, я удалил все файлы из app/tmp/cache/persistent. Обратите внимание, что если вы удалите сам каталог, вы получите ошибку 500 от CakePHP.

Я рекомендую добавить удаление файлов в этом каталоге в процесс развертывания.

person Tyler Collier    schedule 11.04.2014

Элвис: На самом деле ответ был довольно прост. Мне пришлось удалить не только содержимое app/tmp/models, но что на самом деле заставило его работать, так это удаление содержимого app/tmp/persistent.

Это все еще работает с CakePHP 3, это решило мою проблему!

Обновление 1

Есть простой способ очистить кеш с помощью Bake CLI Tool, как показано ниже:

Команда Cache Shell

Чтобы очистить одну конфигурацию кеша:

кеш bin/cake очистить

Чтобы очистить все конфигурации кеша:

кеш bin/торт clear_all

person dixavier27    schedule 22.06.2019
comment
Пожалуйста, не добавляйте спасибо в качестве ответа. На самом деле они не дают ответа на вопрос и могут быть восприняты его будущими посетителями как шум. Как только вы заработаете достаточную репутацию, вы получите право проголосовать за ответы, которые вам нравятся. Таким образом, будущие посетители вопроса увидят большее количество голосов за этот ответ, а ответивший также будет вознагражден очками репутации. См. раздел Почему важно голосовать. - person Matthew; 22.06.2019