$this->Model->save() :这段代码有啥问题?
Posted
技术标签:
【中文标题】$this->Model->save() :这段代码有啥问题?【英文标题】:$this->Model->save() : what's is wrong with this code?$this->Model->save() :这段代码有什么问题? 【发布时间】:2011-11-17 15:08:07 【问题描述】:我是 cakephp 的初学者,我想将一些数据保存到我的数据库中,但我总是收到:消息:抱歉,保存数据时出错。
这是我的代码:(控制器:UsersController.php
:(并且我已将 Model '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.';
提前致谢
编辑: 表用户状态的结构:
id : BIGINT 主键 AUTO INCREMENT, user_id:INT NOT NULL, user_status : SMALLINT NOT NULL, user_phone_nb = VARCHAR(15) NULL
模型用户状态:
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
)
)
【问题讨论】:
你在 core.php 中是否将 DEBUG 设置为 2? 查看我的编辑,我添加了数组 $newUserState 的调试结果 【参考方案1】:我不确定你在这里做什么, 你能发布你的表结构并生成插入查询蛋糕吗?如果您使用标准 cake-layout 并打开调试模式,您会在底部找到它。
我怀疑(但如果没有更多数据我不确定)表中有另一个字段需要一个值(不能为空)。
【讨论】:
感谢您的回答,我没有使用标准的蛋糕布局,并且我的表格包含我想让它们空白的其他字段,我只想插入 user_status。如果某些字段不应该为空,我将验证数据库(这个字段+1 ;)) 没问题 =) 其他一些建议: - 您可以将此命令插入到您的布局中,这样您就可以看到您的蛋糕查询发生了什么: element('sql_dump '); ?> - 还要检查是否有一个字段设置为唯一 - 检查是否有一个主键自动递增的字段希望我能帮助你.. ;-) id : BIGINT 主键 user_id : INT NOT NULL user_status : SMALLINT NOT NULL user_phone-nb = VARCHAR(15) NULL 马上:如果你只保存 user_status 作为新记录,它肯定会抛出一个错误,因为 user_id 不能为空,另外:id(主键)应该设置为 autoincrement 并且 int(20) 应该足够了。 感谢您的回复,我已经添加了表格的结构(请参阅我的编辑),并且我尝试了其他朋友建议的不同方法,仍然得到相同的消息,请参阅我的最后我试过的代码。 是否有任何将字符串转换为 INT 等的东西???我尝试插入的变量类型可能有问题??【参考方案2】:我假设数据库中的字段是“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 食谱 http://book.cakephp.org/view/436/useTable
<?php
class Userstate extends AppModel
var $useTable = 'userstates';
public $name = 'UserState';
同样在 config/core.php 中确保带有调试的行如下所示。
Configure::write('debug', 2);
试试这个,让我知道你的结果。
【讨论】:
我已经尝试过了,使用与模型结构相同的数组,但 id 不起作用,在保存数据时仍然出现错误:s:s 能否请您发布您的 UserState 模型内容...保存数组中缺少一些必需的内容。 您是否也可以在数据库表上做一个 desc 并发布它.. 保存时可能需要一些东西... 可能是模型中没有的 PK PK在模型里,我会加到我的帖子里 试试我添加的修改 $this->UserState->create()... 当然这应该只在这是一个新条目时使用。如果没有,您将需要PK...最喜欢'id'【参考方案3】:这对你有用吗:
$this->UserState->set('UserStatus', '文章的新标题'); $this->UserState->save();希望对你有帮助
【讨论】:
我认为这仅适用于 ActivRecord ( $this->UserState->read();【参考方案4】:我找到了解决办法,
在我的模型中,我有变量 $validate
,其中一些参数将 required
变量设置为 true
。所以我有三个解决方案:
第一:
只是注释变量而不使用它^^
第二:
只需使用默认值初始化所需的变量。
第三:
我发现在文档中,我们可以告诉 cakePHP 在不执行验证的情况下保存我们的数据:
save(array
$donnees = null, boolean $valider = true, array $listeDesChamps = array())
所以我所做的只是保存数据并使用这样的错误值传递第二个参数:$this->UserState->save($newUserState, false);
,(我个人使用了第三个解决方案^^)
谢谢大家的帮助:)
问候,
【讨论】:
【参考方案5】:最后的一些提示:
对于这样的情况,很高兴有多个验证集可以通过以下方式实现: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
【讨论】:
以上是关于$this->Model->save() :这段代码有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 无法使用 Model::create() 和 $model->save() 创建模型
Laravel Eloquent $model->save() 不保存但没有错误
Yii2 - 没有通过 $model->save() 更新值