-1

Cakephp-elasticsearch プラグインを使用して、mysql Db のインデックス作成と検索を行っています。このリンクからチュートリアルに従いました:

https://github.com/dkullmann/CakePHP-Elastic-Search-DataSource

「詳細」モジュールを作成しました:

<?php
class details extends AppModel {

   public $useDbConfig = 'index';
public $useType = 'details';

    public $_mapping = array(
        'name' => array('type' => 'string'),
        'addr' => array('type' => 'string'),
        'phno' => array('type' => 'string'),
        'city' => array('type' => 'string'),
        'state' => array('type' => 'string'),

    );

    public function elasticMapping() {
        return $this->_mapping;
    }
}
?>

レコードのインデックス作成を開始するには、次のコマンドを使用しました。

Console/cake Elastic.elastic index details

次のエラーが表示されます。

Retrieving data from mysql starting on 1970-01-01 00:00:00
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'details.id' in 'field list'
#0 /var/www/cakephp/lib/Cake/Model/Datasource/DboSource.php(460): PDOStatement->execute(Array)
#1 /var/www/cakephp/lib/Cake/Model/Datasource/DboSource.php(426): DboSource->_execute('SELECT `details...', Array)
#2 /var/www/cakephp/lib/Cake/Model/Datasource/DboSource.php(669): DboSource->execute('SELECT `details...', Array, Array)
#3 /var/www/cakephp/lib/Cake/Model/Datasource/DboSource.php(1080): DboSource->fetchAll('SELECT `details...', false)
#4 /var/www/cakephp/lib/Cake/Model/Model.php(2696): DboSource->read(Object(details), Array)
#5 /var/www/cakephp/app/Plugin/Elastic/Console/Command/ElasticShell.php(288): Model->find('all', Array)
#6 /var/www/cakephp/lib/Cake/Console/Shell.php(389): ElasticShell->index()
#7 /var/www/cakephp/lib/Cake/Console/ShellDispatcher.php(200): Shell->runCommand('index', Array)
#8 /var/www/cakephp/lib/Cake/Console/ShellDispatcher.php(68): ShellDispatcher->dispatch()
#9 /var/www/cakephp/app/Console/cake.php(37): ShellDispatcher::run(Array)
#10 {main}

id という名前のフィールドがありません。私を助けてください!!

4

1 に答える 1

1

すべての db テーブルには主キーが必要です

デフォルトでは、そのフィールドの名前はid. テーブルに別の主キーがある場合は、それが何であるかを Cake が認識できるようにprimaryKeyプロパティを設定する必要があります。

class MyModel extends AppModel {

    $primaryKey = 'odd';

}

伝統的であること

私はどんな間違いをしたでしょうか?

質問のコードには他にも間違いがあります。つまり、次のとおりです。

モデル名は単数形

だから、class details-> class detail

Cake は、details使用するテーブルを探すときに、アンダースコア付きの複数形 ( ) を自動的に使用します。

クラス名はカムバックされます

だからclass detail- >class Detail

この本には、 CakePHP の規則に関する詳細情報があります。

これは、 ES プラグインのドキュメントでも暗黙的に強化されています。質問の cli 呼び出しを比較してください。

Console/cake Elastic.elastic index details
                                   ^ lower case plural model name

ESプラグインのreadmeにあるものを使用:

Console/cake Elastic.elastic index Contact
                                   ^ Correct case and singular

規則に従わないことは、一貫性のない動作を見つける簡単な方法です。

于 2013-07-12T08:13:17.467 に答える