2016-12-15 11 views
0

インデックスが定義されたドキュメントがあります。インデックスが作成されていません

/** @ODM\Document */ 
class Stat 
{ 
    /** @ODM\Id(strategy="NONE", type="int") */ 
    private $id; 

    /** @ODM\Field(type="string") */ 
    private $period; 

    /** @ODM\ReferenceOne(targetDocument="Player") */ 
    private $player; 

    /** @ODM\Field(type="string") @ODM\Index */ 
    private $statType; 

ただし、コレクションに作成されたインデックスを見ると、唯一のインデックスは_idです。

$stat = new Documents\Stat(); 

$stat->setId(1); 
$stat->setPlayer($player); 
$stat->setPeriod(1); 
$stat->setStatType('goal'); 

$dm->persist($stat); 
$dm->flush(); 

は私がやっていないよ何か他のものがあります:

は私がやっている文書を保存するには?

答えて

3

通常のODMの使用中に索引が作成されない(マッピングが同期化されている場合は保証されません)。

symfonyを使用している場合は、問題を解決するのは簡単ですが、symfonyのコンソールからdoctrine:mongodb:schema:createコマンドを実行してください(他のフレームワークを使用している場合は、コマンド自体がODMによって提供されていると同等です)。

コードからインデックスを制御する場合は、SchemaManagerを使用して、「スキーマ」を直接制御するAPIを提供できます(ドキュメントごとにインデックスを制御することもできます)。入手は簡単です:$sm = $dm->getSchemaManager();

+0

私はodm:schema:createを試しましたが、インデックスなしですべてのコレクションを取得しています。 – Bernardo

+0

あなたの文書はコマンドによってリストされましたか? すべてのクラスの '作成したDBSすべてのクラスの 作成されたコレクションのすべてのclasses' ため 作成された索引文書のいかなる特定のリストが--class''でコマンドを実行すると、あなたのクラス – malarzm

+0

号確かに正しい答えです! ** doctrine:mongodb:schema:create ** mongodbスキーマを作成して更新し、** doctrine:mongodb:schema:update **を使用してそれを更新することもできます。 – Bernardo

関連する問題