申请到了 Zend Framework 中文文档翻译资格

大概是之前提交的两个 issue 的好处,Bill 这老先生亲自回了一封热情洋溢的信(不过我估计每个通过申请的人收到的内容都差不太多)。并且在我没有想到的短的时间内批准了我的申请。 调整好 cygwin,编译了一下中文手册。configure.in报了两个错误,第 2 行和第 72 行。 line 2: AC_COPYRIGHT([Copyright (c) 2005-2007 Zend Technologies USA Inc. (http://www.zend.com)]) line 72: AC_CONFIG_FILES([Makefile]) 将这两行注释掉, 73行改为: line 73: AC_OUTPUT([Makefile]) 编译通过。 最后发现:原来是 autoconf版本我安装的是2.13,而使用2.61是可以通过的。看来文档中关于编译工具版本的说明应该更详细一些。

Zend_Db_Adapter_Pdo_Oci关于字符集设置的解决方法

默认没有提供在 Zend_Db_Adapter_Pdo 中设置 charset 的方法,使用下面的补丁可以解决这个问题: Index: Oci.php ========================================== — Oci.php (revision 267) +++ Oci.php (working copy) @@ -67,7 +67,12 @@ $tns .= ‘/’; } $tns .= $dsn[‘dbname’]; – + + if (isset($dsn[‘charset’])) + { + $tns .= ‘;charset=’ . $dsn[‘charset’]; + } + return $this->_pdoType . ‘:’ . $tns; } 这样 Zend_Db::factory 方法将支持这样的设置: <?php require_once …

Zend_Db_Select 在 join 系列方法上的注意

大概很多人都跟我一样,在没有遇到问题的时候不去仔细阅读手册,问题如下: 当对一个使用 join 方法的 select 使用 COUNT(*) 统计时,join 总是默认添加字段在 FROM 前。 代码如下: $select->from($this->addStatement(‘CBBS_USER’), new Zend_Db_Expr(‘COUNT(*)’)) ->join($this->addStatement(‘CBBS_POWER’), ‘CBBS_USER.USER_ID = CBBS_POWER.USER_ID’) ->join($this->addStatement(‘CBBS_ROLE’), ‘CBBS_POWER.ROLE_ID = CBBS_ROLE.ROLE_ID’) ->where(‘CBBS_USER.DEL_FLAG = 0’); 这个产生的 SQL 语句: SELECT COUNT(*), “CBBS_POWER”.*, “CBBS_ROLE”.* FROM “ACEMACHINE”.”CBBS_USER” INNER JOIN “ACEMACHINE”.”CBBS_POWER” ON CBBS_USER.USER_ID = CBBS_POWER.USER_ID INNER JOIN “ACEMACHINE”.”CBBS_ROLE” ON CBBS_POWER.ROLE_ID = CBBS_ROLE.ROLE_ID WHERE (CBBS_USER.DEL_FLAG = 0) 实际上只需要: $select->from($this->addStatement(‘CBBS_USER’), …

Zend_Db_Adapter_Pdo_Oci 的 Bug

这个 Bug 在 Zend Framework 的 RC1、RC2 中都存在。2007-06-13日的SVN已经更新了这个Bug。ZF 对 Oracle 的支持又上升到一个层次。 我的 patch文件 Index: Oci.php =============================== — Oci.php (revision 5221) +++ Oci.php (working copy) @@ -261,7 +261,7 @@ if ($primaryKey) { $sequenceName .= “_$primaryKey”; } – $sequenceName .= ‘_seq’; + $sequenceName .= ‘_SEQ’; return $this->lastSequenceId($sequenceName); } return $this->_connection->lastInsertId($tableName);