我有一个在MySQL协议上运行的Sphinx搜索引擎,我使用Phalcon \ Db \ Adapter \ Pdo \ Mysql连接到它。 Sphinx表作为模型实现。
当我尝试选择(使用SpinxQL)时,显然,当数据库适配器尝试提取运行查询的表元数据时,会针对不支持且不存在于SpinxQL中的表提取错误。文档中有一个解决方法,展示了如何手动分配元数据......但是本质上我是懒惰的,我想尝试自动化元数据生成。
我假设元数据是由数据库适配器生成的,可能是因为在getColumnDefinition()或其他(???)之后的实例上调用了getColumnsList()。这是我的假设吗?我想要扩展Phalcon \ Db \ Adapter \ Pdo \ Mysql并覆盖那些与Sphinx兼容的方法。
提前感谢您的建议!
答案 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(
//...
);
});