SphinxQL&尔康\的mvc \型号

时间:2012-12-09 10:12:30

标签: sphinx phalcon

我有一个在MySQL协议上运行的Sphinx搜索引擎,我使用Phalcon \ Db \ Adapter \ Pdo \ Mysql连接到它。 Sphinx表作为模型实现。

当我尝试选择(使用SpinxQL)时,显然,当数据库适配器尝试提取运行查询的表元数据时,会针对不支持且不存在于SpinxQL中的表提取错误。文档中有一个解决方法,展示了如何手动分配元数据......但是本质上我是懒惰的,我想尝试自动化元数据生成。

我假设元数据是由数据库适配器生成的,可能是因为在getColumnDefinition()或其他(???)之后的实例上调用了getColumnsList()。这是我的假设吗?我想要扩展Phalcon \ Db \ Adapter \ Pdo \ Mysql并覆盖那些与Sphinx兼容的方法。

提前感谢您的建议!

1 个答案:

答案 0 :(得分:2)

好的,你需要覆盖至少两个方法才能使这个工作,下面的类可以工作:

<?php

class SphinxQlAdapter extends Phalcon\Db\Adapter\Pdo\Mysql implements Phalcon\Db\AdapterInterface
{

    /**
     * This method checks if a table exists
     *
     * @param string $table
     * @param string $schema
     * @return boolean
     */
    public function tableExists($table, $schema=null)
    {

    }

    /**
     * This method describe the table's columns returning an array of
     * Phalcon\Db\Column
     *
     * @param string $table
     * @param string $schema
     * @return Phalcon\Db\ColumnInterface[]
     */
    public function describeColumns($table, $schema=null)
    {

    }

}

然后在您的连接中,您使用新的适配器:

$di->set('db', function(){
    return new SphinxQlAdapter(
        //...
    );
});