1

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

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

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

提前感谢您的建议!

4

1 回答 1

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(
        //...
    );
});
于 2012-12-10T18:13:21.107 回答