我是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.';
}
Thanks in advance
编辑:表userstates的结构:
id: BIGINT主键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';
}
EDIT 2:
当我调试变量$newUserState时,我得到了这个(这似乎是OK的):
Array
(
[UserState] => Array
(
[user_id] => 18
[user_status] => 0
[user_phone_nb] => 4343
)
)
我不知道你在这里做什么,你可以张贴你的表结构和插入查询蛋糕正在生成?如果您使用标准的蛋糕布局并打开调试模式,您会在底部发现。
我怀疑(但没有进一步的数据不确定)表中有另一个字段需要一个值(不能为null)。
我假设数据库中的字段是'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.';
}
好,试试这个。
将Model重命名为user_state.php
然后根据Cake 1.2食谱添加以下内容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);
试试这个,让我知道你的结果
这个对你有用吗?
<>之前$this->UserState->set('UserStatus', '新标题');$ this -> UserState ->保存();之前希望能有所帮助
我找到解决办法了,
在我的模型中,我有变量$validate
和一些参数,其中required
变量设置为true
。所以我有三个解决方案:
:
只是注释变量,不要使用^^
第二:只需用默认值初始化所需的变量。
第三:我发现在文档中,我们可以告诉cakePHP保存我们的数据而不执行验证:
save(array
$donnees = null, boolean $valider = true, array $listeDesChamps = array())
所以我所做的就是保存数据并传递第二个参数,像这样的假值:$this->UserState->save($newUserState, false);
,(我个人已经使用了这个第三个解决方案^^)
谢谢你的帮助:)
认为,
结尾的一些提示:
-
对于这样的情况,通过以下方式实现多个验证集是很好的:http://bakery.cakephp.org/articles/dardosordi/2008/07/29/multivalidatablebehavior-using-many-validation-rulesets-per-model
-
下次发布完整的代码。如果你没有发布你的模型的4行表示,每个人都认为这是最终的,那么验证的事情将首先被猜测。
-
您应该在布局中重新包含sql转储。由于DEBUG => 0,它不会在实时模式下显示,并且在这种情况下会给你很大的帮助。
-
我认为UserState模型的类名应该是"UserState",就像已经提到的文件名"user_state.php"。这样可以节省一行代码:P
问候func0der