我重新访问了以前编写的一些旧代码,其中我有一个if-else语句来检查$this->save()
是否为true或false。然而,无论输入是什么以及数据是否成功保存在数据库中,save()
似乎都会返回一个数组。
下面是一个名为product
的表的示例,它没有名为iddd
或out_of_stocksdsd
:的列
$temp = array();
$temp['Product']['iddd'] = '1';
$temp['Product']['out_of_stocksdsd'] = '1';
$q = $this->save($temp);
debug($q);
debug($q)
返回以下内容。注意,该阵列包括表product
中存在的modified
和created
索引。
Array
(
[Product] => Array
(
[iddd] => 1
[out_of_stocksdsd] => 1
[modified] => 2013-02-07 21:28:51
[created] => 2013-02-07 21:28:51
)
)
上面的内容不会更新数据库中的任何内容,而且,正如您所看到的,没有迹象表明它是否有效。那么,如何检查$this->save()
是否成功执行?
我知道如何检查$this->Model->save()
是否成功的最好方法是使用if/else
。如果数据未成功保存,则返回的并且应该在变量$q
中的唯一内容是布尔值FALSE
。
另外,请记住,CakePHP/PHP并不关心要保存的数组中有什么。如果Db表有5列(id、name、content、created、modified),那么cake只关心这些值(取决于验证)。如果向数组中添加更多列(iddddd、nameeeeee、anothercolumn等),它们将被跳过,不会引发错误。
按照这里的代码编写方式,它永远不会保存任何东西,因为你没有传递ID。虽然命令会成功,但一旦它们到达MySQL,你的条目就会神奇地消失。如果要在表中创建新条目,则必须在调用$this->Model->save()
之前调用$this->Model->create()
,除非正在更新表中的条目,否则需要传递ID或分配ID,例如:$this->Model->id = 1;