Ответ 1
Всякий раз, когда вы вносите какие-либо изменения в свою базу данных, убедитесь, что ваше отладочное значение файла app/config/core.php
равно 2. Configure::write('debug', 2);
Если это 0 изменений базы данных, не будет обнаружено.
Как продлить проект cakePHP, чтобы он мог использовать новое поле в базе данных?
Я только что дал проект CakePHP, который я пытаюсь расширить модель, чтобы включить новое поле. я Оригинальный Разработчик больше не доступен, и я ранее не работал с CakePHP. Проблема в том, что все остальные поля сохраняются правильно, но новое поле сохраняется как пустая строка.
База данных была расширена, чтобы включить новое поле:
class_time varchar(30)
Я продлил первоначальное представление для поддержки нового поля
<?=$form->input('release', array('type' => 'radio', 'legend' => false, 'div' => 'radio', 'options' => array('Agree' => 'Agree ', 'Disagree' => 'Disagree')))?>
<?=$form->input('class_time', array('type' => 'radio', 'legend' => false, 'div' => 'radio', 'options' => array('No preference' => 'No preference ', '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 </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 </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';
}
?>
Это заставляет меня задаться вопросом, как первоначальный разработчик получил "выпуск" для сохранения, хотя он, как представляется, не определен.
Есть ли что-то, чего мне не хватает, или что еще нужно сделать?
Всякий раз, когда вы вносите какие-либо изменения в свою базу данных, убедитесь, что ваше отладочное значение файла app/config/core.php
равно 2. Configure::write('debug', 2);
Если это 0 изменений базы данных, не будет обнаружено.
В приложении CakePHP всякий раз, когда вы добавляете новое поле или изменяете структуру в базе данных, вы должны удалить все файлы в папке YourApplication/app/tmp/cache/models.
При каждом изменении базы данных выполните следующие действия:
Попробуйте очистить все модели в каталоге кеша.
приложение /TMP/кэш/модели
очистить кеш в /app/tmp/cache
если повышение уровня отладки до 2 или 3 не работает.
убедитесь, что, используя debug ($ Model), показывает ваше новое поле в атрибуте схемы модели.
Вы также можете удалить файл кеша, если изменения в базе данных не работают.
путь вашего приложения \app\tmp\cache\models
Совсем немного позже, но я искал способ сделать это сегодня в 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
Вам нужно сообщить cakephp, что у вас есть новые поля в вашем db. Зачем вам это нужно, coz cakephp сканирует db только один раз и генерирует схемы. Однажды он обращается к первому запуску. Схемы можно найти в app\tmp\cache\models
.
Поэтому, если вы очистите файлы в указанной выше папке, то вы можете создать схему. Теперь есть исключение, если вы находитесь в режиме разработки/отладки, cakephp сканирует его каждый раз.
Фактически, любые изменения в базе данных, в любое время, вы должны изменить режим отладки на 2 в app/config/core.php
если он равен нулю. В противном случае он будет принимать значения из кеша.