cakephp新领域没有保存

Tez*_*zyn 15 cakephp

如何扩展cakePHP项目,以便它可以在数据库中使用新字段?

我刚刚给出了一个CakePHP项目,我正在尝试扩展模型以包含一个新字段.我原来的开发人员已经不再可用了,我之前没有和CakePHP合作过.问题是所有其他字段都正确保存,但新字段被保存为空字符串.

数据库已扩展到包括新字段:

class_time  varchar(30)
Run Code Online (Sandbox Code Playgroud)

我扩展了原始视图以支持新字段

<?=$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.')))?>
Run Code Online (Sandbox Code Playgroud)

就像我所知,该页面正确地呈现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>
Run Code Online (Sandbox Code Playgroud)

但是当它保存时,它会保存"release"字段(和其他字段)的选择,而不是class_time.

我可以在cakePHP文档中找到app/models/account.php,我相信我需要定义新字段,但它只包含以下内容:

<?php
  class Account extends AppModel {
    var $name = 'Account';
  }
?>
Run Code Online (Sandbox Code Playgroud)

这让我想知道原始开发者如何得到"发布"来保存,即使它似乎没有被定义.

有什么东西我缺少,或者仍然需要做?

Vin*_*ins 60

每当您对数据库进行任何更改时,请确保您的app/config/core.php文件调试值为2.Configure::write('debug', 2);

如果是0,则不会检测到数据库更改.

  • 我建议在实时网站上手动删除临时缓存文件_而不是习惯在数据库发生变化时打开调试模式.打开调试模式会出现详细的错误以及数据库查询,`pr()`等,这不是公众的眼睛.请参阅http://stackoverflow.com/a/21779427/216084上的回答 (6认同)
  • FWIW这是因为在生产中,Cake缓存了数据库结构,因此它不必在每次加载页面时再次查询db.这很少是一个问题,因为无论如何都应该将调试级别设置为2. (4认同)
  • 我认为其他答案更好,因为如果您运行了网站,则不希望向用户显示调试信息.更好的是"sudo rm app/tmp/cahe/models/*" (3认同)

小智 24

在CakePHP应用程序中,无论何时添加新字段或修改数据库中的结构,都应删除YourApplication/app/tmp/cache/models文件夹中的所有文件.


小智 5

每当您进行任何数据库更改时,请遵循以下步骤:

  1. 清除 \app\tmp\cache\models 下的文件
  2. 如果您正在使用任何缓存引擎,如 memcache,请重新启动缓存服务。
  3. 在 core.php 中将 debug 设置为 2