0

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

这是一个名为 的表的示例product,它没有名为idddor的列out_of_stocksdsd

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

debug($q)返回下面的内容。请注意,该数组包括表中存在的modified索引。createdproduct

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()成功执行?

4

1 回答 1

1

我知道如何检查是否$this->Model->save()成功的最好方法是使用if/else. 如果数据未成功保存,则返回且应在变量中的唯一内容$q是 boolean FALSE

另外,请记住,CakePHP/PHP 并不关心要保存的数组中的内容。如果您的 Db 表有 5 列(id、name、content、created、modified),那么 cake 将只关心这些值(取决于验证)。如果向数组添加更多列(idddddd、nameeeeee、anothercolum 等),它们将被跳过并且不会引发错误。

此处编写代码的方式,它永远不会保存任何内容,因为您没有传递 ID。尽管该命令会成功,但您的条目一旦到达 MySQL 就会神奇地消失。如果您想在表中创建新条目,则必须在调用$this->Model->create()之前调用$this->Model->save(),除非您正在更新表中的条目,您需要传递一个 ID 或分配一个 ID,如下所示:$this->Model->id = 1;

于 2013-02-08T04:35:51.003 回答