Dan*_*Dan 38 cakephp cakephp-model
我的调试值设置为2,它显示所有查询,除了我需要的查询.
我有一个Items控制器方法,在User模型中调用此方法(Item belongsTo User):
function add_basic($email, $password) {
$this->create();
$this->set(array(
'email' => $email,
'password' => $password
));
if($this->save()) {
return $this->id;
}
else {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
我已经确认$email并且$password正在正确地传递给函数(并且填充了合法数据).email并且password是User模型中字段的名称.
我还确认$this->save()它正在返回false,但是当我查看发生这种情况的页面时,查询没有在调试中打印,并且没有抛出错误,所以我不知道什么是错误的.
关于如何查看错误或者为什么查询似乎没有被执行的任何想法?
这很奇怪,因为在此之后,我有另一个模型以完全相同的方式保存数据,它顺利出现.
ink*_*dmn 43
这可能会为您提供所需的信息(假设由于数据无效而无法保存):
if(!$this->save()){
debug($this->validationErrors); die();
}
Run Code Online (Sandbox Code Playgroud)
ima*_*man 14
包含validationErrors数组
if ($this->save()) {
return $this->ModelName->id;
}
else {
debug($this->ModelName->invalidFields());
return false;
}
Run Code Online (Sandbox Code Playgroud)
nei*_*kes 10
你有一个beforeValidate()或beforeSave()模型或应用模型的方法?如果,他们回归真实吗?如果不这样做,请使用调试器,在您的IDE中的cake/libs/models/model.php save()方法的顶部设置一个断点,然后逐步执行代码,直到它返回false.没有添加die('here');电话.
试试这个:
if ($this->save()) {
return $this->id;
}
else {
var_dump($this->invalidFields());
return false;
}
Run Code Online (Sandbox Code Playgroud)
@cakePHP 3.6及更高版本:默认情况下,请求数据将在转换为实体之前进行验证。如果任何验证规则失败,返回的实体将包含错误。可以通过 getErrors() 方法读取。\n有错误的字段将不会出现在返回的实体中:
\n\n假设你有一个实体
\n\nuse App\\Model\\Entity\\Article;\n\n$entity = $this->ModelName->newEntity([\n \'id\' => 1,\n \'title\' => \'New Article\',\n \'created\' => new DateTime(\'now\')\n]);\n\n$result = $this->ModelName->save($entity);\n\n\\Cake\\Log\\Log::debug($entity->getErrors());\nRun Code Online (Sandbox Code Playgroud)\n\n如果您\xe2\x80\x99d 希望在转换请求数据时禁用验证,请将validate选项设置为 false:
\n\n$article = $articles->newEntity(\n $this->request->getData(),\n [\'validate\' => false]\n);\nRun Code Online (Sandbox Code Playgroud)\n\n参考:https: //book.cakephp.org/3/en/orm/validation.html
\n