SphinxQL&Phalcon \ Mvc \ Model

问题描述:

我有一个运行于MySQL协议上的Sphinx搜索引擎,我使用Phalcon \ Db \ Adapter \ Pdo \ Mysql连接到它。狮身人面像表被实现为模型。SphinxQL&Phalcon Mvc Model

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

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

在此先感谢您的建议!

好吧,你需要重写至少两种方法来完成这项工作,下面的类将工作:

<?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(
     //... 
    ); 
});