【问题标题】:Zend Framework findBy magic method?Zend Framework findBy 魔术方法?
【发布时间】:2009-02-04 02:28:17
【问题描述】:

除了在模型类中使用$this->fetchAll('email = ?',$email)->current(),有没有办法做到$this->fetchByEmail($email)$this->findByEmail($email)

对于Zend_Log,已经有一个像这样的魔术方法,你只需写$myLogger->crit("Something went wrong"),而不是$myLogger->log("Something went wrong",Zend_Log::CRIT),它就会自动映射(通过__call()方法中的一些时髦的反射)。

有人知道Zend_Db 课程中是否有类似的东西,还是我必须写一些东西来为我做这件事?

【问题讨论】:

    标签: php zend-framework


    【解决方案1】:

    对于您想要的特定功能,您需要构建一个自定义函数。老实说,神奇的 __call() 函数背后的逻辑并不难。

    这样的事情应该可以解决问题:

    public function __call($function, $args)
    {
        // Expects findBy to be the first part of the function
        $criteria = substr($function, 6);
        $criteria = strtolower($criteria);
    
        $select = $this->select()
                    ->from($this->_name)
                    ->where($criteria . ' = ?', $args);
    }
    

    显然,如果您希望它处理更复杂的情况,例如数组或多个标准参数,则需要实现更好的检查,但这应该提供基本思想。

    【讨论】:

      【解决方案2】:

      根据文档你必须自己做 http://framework.zend.com/manual/en/zend.db.table.html#zend.db.table.extending.finders

      所以我建议自己创建或使用 gabriel1836 发布的那个

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-07
        • 1970-01-01
        • 1970-01-01
        • 2015-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多