$this->Model->save():这段代码出了什么问题?


$this->Model->save() : what's is wrong with this code?

我是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);,(我个人已经使用了这个第三个解决方案^^)

谢谢你的帮助:)

认为,

结尾的一些提示:

  1. 对于这样的情况,通过以下方式实现多个验证集是很好的:http://bakery.cakephp.org/articles/dardosordi/2008/07/29/multivalidatablebehavior-using-many-validation-rulesets-per-model

  2. 下次发布完整的代码。如果你没有发布你的模型的4行表示,每个人都认为这是最终的,那么验证的事情将首先被猜测。

  3. 您应该在布局中重新包含sql转储。由于DEBUG => 0,它不会在实时模式下显示,并且在这种情况下会给你很大的帮助。

  4. 我认为UserState模型的类名应该是"UserState",就像已经提到的文件名"user_state.php"。这样可以节省一行代码:P

问候func0der