CakePHP новое поле не сохраняется - PullRequest
14 голосов
/ 19 августа 2011

Как расширить проект cakePHP, чтобы он мог использовать новое поле в базе данных?

Я только что дал проект CakePHP, в котором я пытаюсь расширить модель для включения нового поля.I Первоначальный разработчик больше не доступен, и я раньше не работал с CakePHP.Проблема заключается в том, что все остальные поля сохраняются правильно, но новое поле сохраняется как пустая строка.

База данных расширена для включения нового поля:

class_time  varchar(30)

Я расширил исходный вид для поддержки нового поля

<?=$form->input('release', array('type' => 'radio', 'legend' => false, 'div' => 'radio', 'options' => array('Agree' => 'Agree &nbsp;', 'Disagree' => 'Disagree')))?>
<?=$form->input('class_time', array('type' => 'radio', 'legend' => false, 'div' => 'radio', 'options' => array('No preference' => 'No preference&nbsp;', '6:00-8:30 P.M. ' => '6:00-8:30 P.M. ', '6:30-9:00 P.M.' => '6:30-9:00 P.M.')))?>

Насколько я могу судить, страница правильно отображает HTML

<div class="radio"><input type="hidden" name="data[Account][release]" id="AccountRelease_" value=""><input type="radio" name="data[Account][release]" id="AccountReleaseAgree" value="Agree"><label for="AccountReleaseAgree">Agree &nbsp;</label><input type="radio" name="data[Account][release]" id="AccountReleaseDisagree" value="Disagree"><label for="AccountReleaseDisagree">Disagree</label></div>
<div class="radio"><input type="hidden" name="data[Account][class_time]" id="AccountClassTime_" value=""><input type="radio" name="data[Account][class_time]" id="AccountClassTimeNoPreference" value="No preference"><label for="AccountClassTimeNoPreference">No preference&nbsp;</label><input type="radio" name="data[Account][class_time]" id="AccountClassTime6:00-8:30P.m." value="6:00-8:30 P.M. "><label for="AccountClassTime6:00-8:30P.m.">6:00-8:30 P.M. </label><input type="radio" name="data[Account][class_time]" id="AccountClassTime6:30-9:00P.m." value="6:30-9:00 P.M."><label for="AccountClassTime6:30-9:00P.m.">6:30-9:00 P.M.</label></div>

Но когда она сохраняется, онасохраняет выбор для поля «release» (и других), но не для class_time.

Из того, что я могу найти в документации по cakePHP, app / models / account.php - это то, где, я полагаю, я хотел бынужно определить новое поле, но оно состоит только из следующего:

<?php
  class Account extends AppModel {
    var $name = 'Account';
  }
?>

Что заставляет меня задуматься, как оригинальный разработчик получил «релиз» для сохранения, даже если он не определен.

Есть что-то, чего мне не хватает, или что еще нужно сделать?

Ответы [ 9 ]

59 голосов
/ 19 августа 2011

Всякий раз, когда вы вносите какие-либо изменения в вашу базу данных, убедитесь, что ваше app/config/core.php значение для отладки файла равно 2. Configure::write('debug', 2);

Если оно равно 0, изменения базы данных не будут обнаружены.

22 голосов
/ 14 февраля 2014

В приложении CakePHP всякий раз, когда вы добавляете новое поле или изменяете структуру в базе данных, вы должны удалять все файлы в папке YourApplication / app / tmp / cache / models .

3 голосов
/ 22 мая 2014

Всякий раз, когда вы вносите какие-либо изменения в базу данных, выполняйте следующие шаги:

  1. Очистите файлы в \ app \ tmp \ cache \ models
  2. Если вы используете любые механизмы кэширования, такие как memcacheперезапустите службу кэширования.
  3. Установите для отладки 2 в core.php
2 голосов
/ 24 ноября 2014

Попробуйте очистить все модели в каталоге кеша.

app / tmp / cache / models

1 голос
/ 22 октября 2016

Немного позже, но я искал способ сделать это сегодня в Cake 3.x. Самый простой способ, ИМО:

bin/cake orm_cache build

, который восстановит кеш с текущей структурой БД.

Или просто очистить без перестроения:

bin/cake orm_cache clear

http://book.cakephp.org/3.0/en/console-and-shells/orm-cache.html

1 голос
/ 13 октября 2013

Вы также можете удалить файл кэша, если изменения в вашей базе данных не работают.

путь вашего приложения \ app \ tmp \ cache \ models

1 голос
/ 27 сентября 2013

очистить кеш в / app / tmp / cache

если повышение уровня отладки до 2 или 3 не работает.

проверьте, показывает ли новое поле в атрибуте схемы модели debug ($ Model).

0 голосов
/ 24 февраля 2014

Вы должны сообщить cakephp, что у вас есть новые поля в вашей базе данных.Почему вам нужно это сделать, так как coz cakephp сканирует БД только один раз и генерирует схемы. Однажды относится к первому запуску.Вы можете найти схемы в app\tmp\cache\models.

. Поэтому, если вы очистите файлы в вышеупомянутой папке, торт сгенерирует схему.Теперь есть исключение, если вы находитесь в режиме разработки / отладки, и CakePHP сканирует его каждый раз.

0 голосов
/ 24 июня 2013

На самом деле, любые изменения в базе данных, в любое время, вы должны изменить режим отладки на 2 в app/config/core.php, если он равен нулю. В противном случае он будет принимать значения из кэша.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...