我是cakePHP的初学者,我想将一些数据保存到我的数据库中,但我总是得到:消息:抱歉,保存数据时出错。
这是我的代码:(控制器:UsersController.php
:(我已将模型'UserState添加到数组$uses
)
if($onbreak == 'true'){
$userStatus = 1;
//$response['userStatus'] = 1;
} else {
$userStatus = 0;
//$response['userStatus'] = 0;
}
//add the new user_status to the $newUserState
$newUserState['UserState']['user_id'] = $userID;// $userID = 1
$newUserState['UserState']['user_status'] = $userStatus;
//adding values for fields which should not be NULL
$newUserState['UserState']['user_phone_nb'] = '4343';
//
saving data
if($this->UserState->save($newUserState)){
$response['success'] = 'true';
$response['message'] = '';
}else{
$response['success'] = 'false';
$response['message'] = 'Sorry, Error while saving data.';
}
提前致谢
编辑: 表userstates的结构:
id:BIGINT主键AUTO INCREMENT, user_id:INT NOT NULL, user_status:SMALLINT NOT NULL, user_phone_nb = VARCHAR(15)NULL
Model Userstate:
class Userstate extends AppModel {
var $useTable = 'userstates';
public $name = 'UserState';
}
编辑2:
当我调试变量$ newUserState时我得到了这个(看起来没问题):
Array
(
[UserState] => Array
(
[user_id] => 18
[user_status] => 0
[user_phone_nb] => 4343
)
)
答案 0 :(得分:2)
我不确定你在这做什么 你可以发布你的表结构和插入查询蛋糕正在生成?如果您使用标准的cake-layout并且启用了调试模式,则会在底部找到。
我怀疑(但不确定没有更多数据)表格中还有另一个字段需要一个值(不能为空)。
答案 1 :(得分:1)
我假设数据库中的字段是'userStatus',并且只保存一个值。但这应该有效,你应该能够扩展它以保存其他值。
希望这有帮助。
保存新记录
if($onbreak == 'true'){
$userStatus = 1;
} else {
$userStatus = 0;
}
//add the new user_status to the $newUserState
$newUserState['UserState']['user_id'] = $userID;// $userID = 1
$newUserState['UserState']['user_status'] = $userStatus;
//adding values for fields which should not be NULL
$newUserState['UserState']['user_phone_nb'] = ' ';
// Must include id as it is a primary Key and thus required for saving.
$newUserState['UserState']['id'] = $userstate_id;
//saving data
if($this->UserState->save($newUserState)){
$response['success'] = 'true';
$response['message'] = '';
}else{
$response['success'] = 'false';
$response['message'] = 'Sorry, Error while saving data.';
}
好的尝试一下。
将您的模型重命名为user_state.php
然后根据Cake 1.2 cookbook添加以下内容 http://book.cakephp.org/view/436/useTable
<?php
class Userstate extends AppModel {
var $useTable = 'userstates';
public $name = 'UserState';
}
同样在config / core.php中,确保带有debug的行如下所示。
Configure::write('debug', 2);
试试这个,让我知道你的结果。
答案 2 :(得分:0)
这适合你吗?
$this->UserState->set('UserStatus', 'New title for the article'); $this->UserState->save();
我希望它有所帮助
答案 3 :(得分:0)
我找到了解决方案,
在我的模型中,我有变量$validate
,其中包含一些required
变量设置为true
的参数。所以我有三个解决方案:
首先:
只是评论变量并且不要使用它^^
<强>第二强>
使用默认值初始化所需的变量。
第三:
我发现在doc中,我们可以告诉cakePHP保存我们的数据而不进行验证:
save(array
$donnees = null, boolean $valider = true, array $listeDesChamps = array())
所以我所做的就是保存数据并传递第二个参数,其值为false $this->UserState->save($newUserState, false);
,(我亲自使用过这个第三个解决方案^^)
谢谢大家的帮助:)
此致
答案 4 :(得分:0)
最后的一些提示:
对于像这样的情况,可以通过以下方式使多个验证集成为可能:http://bakery.cakephp.org/articles/dardosordi/2008/07/29/multivalidatablebehavior-using-many-validation-rulesets-per-model
下次发布完整代码。如果您没有发布模型的4行代表,并且每个人都认为是最终的,那么首先会猜到验证的事情。
您应该在布局中重新包装sql转储。由于DEBUG =&gt;它不会以实时模式显示0,并将帮助你在这样的情况下发挥巨大作用。
我认为UserState模型的类名应该是“UserState”,就像已经提到的文件名“user_state.php”一样。这将节省一行代码:P
问候 func0der