1

MySQL プロトコルで実行されている Sphinx 検索エンジンがあり、Phalcon\Db\Adapter\Pdo\Mysql を使用して接続しています。Sphinx テーブルはモデルとして実装されます。

(SpinxQL を使用して) 選択しようとすると、明らかに、データベース アダプターがサポートされておらず、SpinxQL に存在しないテーブルに対してクエリを実行しているテーブル メタデータを抽出しようとすると、エラーが発生します。ドキュメントには、メタデータを手動で割り当てる方法を示す回避策があります...しかし、本質的に怠惰なので、メタデータ生成を自動化したいと考えています。

おそらく getColumnDefinition() に続くインスタンスで getColumnsList() を呼び出した結果、または何か他のもの (???) の結果として、データベース アダプターによってメタデータが生成されると思います。これは私の仮定が正しいですか?Phalcon\Db\Adapter\Pdo\Mysql を拡張し、これらのメソッドをオーバーライドして Sphinx と互換性を持たせたいと考えています。

ご提案いただきありがとうございます。

4

1 に答える 1

2

これを機能させるには、少なくとも 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 に答える