我可以在CakePHP的更新语句中添加条件吗? - php

由于似乎没有对optimistic locking in CakePHP的任何支持,因此我尝试建立一种实现它的行为。在对行为进行了一些研究之后,我认为我可以在beforeSave事件中运行查询以检查version字段是否未更改。

但是,我宁愿通过将update语句的WHERE子句从

WHERE id = ?

WHERE id = ? and version = ?

这样,我不必担心其他请求在读取版本和执行更新之间更改数据库记录的请求。这也意味着我可以执行一个数据库调用,而不是两个。

我可以看到DboSource.update()方法支持条件,但是Model.save()从不向其传递任何条件。

看来我有两种选择:

beforeSave()中进行检查,并确保它不是防弹的。
破解我的CakePHP本地副本,以检查conditionsoptions数组中的Model.save()密钥,并将其传递给DboSource.update()方法。

现在,我倾向于第二种选择,但这意味着我无法与其他用户分享我的行为,除非他们将我的hack应用于他们的框架。

我错过了一个更简单的选择吗?

参考方案

当使用save()更新记录时,Cake希望存在id,并且仅使用该id更新记录。

您要查找的是updateAll()

updateAll(array $fields, array $conditions)

一次调用可更新许多记录。要更新的记录由$ conditions数组标识,要更新的字段及其值由$ fields数组标识。

例如,要批准所有已加入会员一年以上的面包师,更新呼叫可能类似于:

$this_year = date('Y-m-d h:i:s', strtotime('-1 year'));

$this->Baker->updateAll(
    array('Baker.approved' => true),
    array('Baker.created <=' => "$this_year")
);

CakePHP:为插件创建动作挂钩 - php

我想包括与Wordpress中类似的动作挂钩。我已经阅读了有关编写插件的章节,但是我希望能够在不更改父应用程序代码的情况下对其进行维护。是否对此有任何支持?如果没有,有没有好的方法?我有一些想法,但我担心自己会重新发明轮子。 参考方案 就在这里。CakePHP Event System它的工作原理与WordPress的挂钩非常相似,但效果更好。您可以在不同的…

PHP-将日期插入日期时间字段 - php

我已在数据库中使用datetime字段存储日期,使用PHP将“今天的日期”插入该字段的正确方法是什么?干杯, 参考方案 我认为您可以使用php date()函数

CakePHP AJAX布局 - php

我正在使用CakePHP应用程序和jQuery Mobile。在CakePHP应用程序中,RequestHandler已打开,现在,jQuery Mobile将所有请求作为ajax请求发出,但不仅需要整页,而且需要完整的页面布局。我需要requesthandler,并且尝试设置布局,强制渲染,关闭自动布局,没有任何效果,cake只返回我视图的内容。我真的很想…

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…

php Singleton类实例将在多个会话中保留吗? - php

举一个简单的例子,如果我想计算一个不使用磁盘存储的脚本的命中次数,我可以使用静态类成员来执行此操作吗?用户1:<?php $test = Example::singleton(); $test->visits++; ?> 用户2:<?php $test = Example::singleton(); $test->visits+…