CakePHP 1.3:如何检查$this->;save()表示成功或失败


CakePHP 1.3: how to check if $this->save() is a success or fail?

我重新访问了以前编写的一些旧代码,其中我有一个if-else语句来检查$this->save()是否为true或false。然而,无论输入是什么以及数据是否成功保存在数据库中,save()似乎都会返回一个数组。

下面是一个名为product的表的示例,它没有名为idddout_of_stocksdsd:的列

$temp = array();
$temp['Product']['iddd'] = '1';
$temp['Product']['out_of_stocksdsd'] = '1';           
$q = $this->save($temp);            
debug($q);

debug($q)返回以下内容。注意,该阵列包括表product中存在的modifiedcreated索引。

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;