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

时间:2011-11-17 15:08:07

标签: php cakephp save cakephp-2.0

我是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
        )

)

5 个答案:

答案 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)

最后的一些提示:

  1. 对于像这样的情况,可以通过以下方式使多个验证集成为可能:http://bakery.cakephp.org/articles/dardosordi/2008/07/29/multivalidatablebehavior-using-many-validation-rulesets-per-model

  2. 下次发布完整代码。如果您没有发布模型的4行代表,并且每个人都认为是最终的,那么首先会猜到验证的事情。

  3. 您应该在布局中重新包装sql转储。由于DEBUG =&gt;它不会以实时模式显示0,并将帮助你在这样的情况下发挥巨大作用。

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

  5. 问候 func0der