Zend Framework:重用从 Zend_Db_Select::getPart() 返回的 WHERE 子句

发布于 2024-10-06 13:45:56 字数 635 浏览 3 评论 0原文

我有一个包含 WHERE 的 SELECT 对象。

我可以使用 getPart(Zend_Db_Select::WHERE) 返回 WHERE,这会返回类似这样的内容:

array
    0 => string "(clienttype = 'agent')"
    1 => string "AND (nextpayment < (NOW() - INTERVAL 1 DAY))"

这个数组似乎毫无用处,因为我无法用它执行此操作

$client->update(array("paymentstatus" => "lapsed"), $where);

,甚至无法将其放入另一个 SELECT 对象中。有没有办法从 SELECT 对象获取 WHERE 语句的更有用的表示形式?

谢谢

编辑

到目前为止我想出的最好的办法是

$where = new Zend_Db_Expr(implode(" ", $select->getPart(Zend_Db_Select::WHERE)));

I have a SELECT object which contains a WHERE.

I can return the WHERE using getPart(Zend_Db_Select::WHERE), this returns something like this:

array
    0 => string "(clienttype = 'agent')"
    1 => string "AND (nextpayment < (NOW() - INTERVAL 1 DAY))"

This array seems pretty useless as I cannot do this with it

$client->update(array("paymentstatus" => "lapsed"), $where);

Or even put it into another SELECT object. Is there a way of getting a more useful representation of the WHERE statement from the SELECT object?

Thanks

EDIT

The best I have come up with so far is

$where = new Zend_Db_Expr(implode(" ", $select->getPart(Zend_Db_Select::WHERE)));

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

游魂 2024-10-13 13:45:56

您的第一个选择 $client->update(...) 会起作用,if getParts 省略了 where 子句第二部分中的“AND”。

我很确定您唯一的选择是:

  1. 使用第二个选项(可能是最安全的,具体取决于 where 子句的复杂程度) - 或 -
  2. 迭代返回的 $where 并删除可能存在的前导“AND”、“OR” 。

Your first choice, $client->update(...) would work, if getParts omitted the 'AND' from the second part of the where clause.

I'm pretty sure your only choice is to:

  1. use your second option (probably safest depending on how complex the where clauses are) -or-
  2. iterate through the $where returned and remove the leading 'AND', 'OR' that may exist.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文