Подтвердить что ты не робот

cakephp новое поле не сохраняется

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

Я только что дал проект CakePHP, который я пытаюсь расширить модель, чтобы включить новое поле. я Оригинальный Разработчик больше не доступен, и я ранее не работал с 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>

Но когда он сохраняет, он сохраняет выделение для поля "выпуска" (и других), но не класса_time.

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

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

Это заставляет меня задаться вопросом, как первоначальный разработчик получил "выпуск" для сохранения, хотя он, как представляется, не определен.

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

При каждом изменении базы данных выполните следующие действия:

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

Ответ 4

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

приложение /TMP/кэш/модели

Ответ 5

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

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

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

Ответ 6

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

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

Ответ 7

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

bin/cake orm_cache build

который будет восстанавливать кеш с текущей структурой db.

Или просто очистить без перестройки:

bin/cake orm_cache clear

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

Ответ 8

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

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

Ответ 9

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