cakephp新字段未保存

cakephp新字段未保存,cakephp,Cakephp,如何扩展cakePHP项目,使其可以使用数据库中的新字段 我刚刚给出了一个CakePHP项目,我正在尝试扩展该模型以包含一个新字段。我知道原来的开发者已经不在了,我以前也没有使用过CakePHP。问题是所有其他字段都被正确保存,但新字段被保存为空字符串 数据库已扩展,包括新字段: class_time varchar(30) 我扩展了原始视图以支持新字段 <?=$form->input('release', array('type' => 'radio', 'legend'

如何扩展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>
同意不同意
无优惠下午6:00-8:30 6:30-9:00。
但当它保存时,它保存的是“release”字段(以及其他字段)的选择,而不是class_时间

从cakePHP文档中可以找到,app/models/account.php是我认为需要定义新字段的地方,但它只包含以下内容:

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

这让我想知道最初的开发人员是如何保存“版本”的,尽管它似乎没有定义


是否有我遗漏的内容,或者仍然需要执行的内容?

每当您对数据库进行任何更改时,请确保您的
app/config/core.php
文件调试值为2<代码>配置::写入('debug',2)


如果为0,则不会检测到数据库更改。

实际上,任何时候对数据库的更改,如果为0,则应在
app/config/core.php
中将调试模式更改为2。否则它将从缓存中获取值。

在/app/tmp/cache处清除缓存

如果将调试级别提高到2或3不起作用


在使用debug($Model)时,检查是否在Model的schema属性下显示新字段。

如果数据库更改不起作用,也可以删除缓存文件

应用程序\app\tmp\cache\models的路径


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

您需要通知CakePHP您的数据库中有新字段。之所以需要这样做是因为cakephp只扫描数据库一次并生成模式一次指第一次运行。您可以在
app\tmp\cache\models
中找到架构


因此,如果清除上面文件夹中的文件,cake将重新生成模式。现在有一个例外,如果您处于开发/调试模式,cakephp每次都会扫描它

无论何时更改数据库,请遵循以下步骤:

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

  • 尝试清除缓存目录下的所有模型

    app/tmp/cache/models


    很晚了,但我今天在Cake 3.x中正在寻找一种实现这一点的方法。最简单的方法,海事组织:

    bin/cake orm_cache build
    
    这将使用当前数据库结构重建缓存

    或者只需清除不重建:

    bin/cake orm_cache clear
    

    在cakephp 3中,您还应该检查实体文件中的该模型,并确保该字段位于$\u accesible属性下

    例如:

    protected $_accessible = [
        'name' => true,
        'topic' => true,
        'new_field' => true
    ];
    

    视图和模型之间存在控制器操作。问题可能就在那里。控制器可能位于app/controllers/accounts\u controller.php中,请尝试找到其中的操作代码并将其发布到此处。该功能似乎有点神秘(imho),但它会像您所说的那样进行更新。。。谢谢你的快速回复!FWIW这是因为生产中的Cake缓存数据库结构,因此它不必在每次页面加载时再次查询数据库。这很少是一个问题,因为您无论如何都应该在调试级别设置为2的情况下进行开发。我建议手动删除实时网站上的临时缓存文件,而不是养成在数据库发生更改时打开调试模式的习惯。打开调试模式会显示详细的错误以及数据库查询、
    pr()
    等,这是不公开的。参考答案在我认为其他答案更好,因为如果你已经运行你的网站,你不想显示调试信息给你的用户。更好的是“sudormapp/tmp/cahe/models/*”
    app/config/core.php
    不再存在。所以,我建议这个答案。完美工作-1:将调试模式设置为非零将清除缓存。你的解决方案会奏效,但你的推理是错误的。另外,对于实时网站,不建议将调试模式设置为非零数,因为它将公开详细的错误消息和数据库查询。根据文档,对于实时网站,这是推荐的方法。更多信息:这就是解决我问题的方法。谢谢,@BSounder.you拯救了这一天。这不会影响现场环境吗?