0

PHP/CodeIgniter を使用して MongoDB でクエリを実行しようとしていますが、解決策が見つかりません...

「function1」に最初のクエリがあります

$this->mongo_db->where("category" => getCatID("games");

そして、2番目の関数「getCatID」には

return $this->mongo_db->select('_id')->where("name" => $name)->get('Category');

しかし、2 番目の関数は function1 の最初のクエリで継続しているようです。

私はこのライブラリを使用しています...

4

1 に答える 1

1

あなたの最初のコードスニペットは次のように意図されていたと思います:

$this->mongo_db->where("category", getCatID("games"));
// or…
$this->mongo_db->where(array("category" => getCatID("games")));

私はこのライブラリを使用していませんが、ソース コードを熟読すると、設定されたすべてのクエリ基準がクラスwhere()の内部$wheresプロパティに蓄積されているように見えます。これは、次のパブリック メソッドから呼び出されるMongo_dbプライベート メソッドによってのみクリアされます。_clear()

これらの終了メソッドのいずれかが呼び出されるたびに、$wheresリセットされます。同様に、これらのメソッドが呼び出されない場合、古い基準が次の基準に流れ込む可能性があります。あなたの場合、getCatID()以前の基準をクリアしている可能性があります。PHP は、それが引数であるメソッドgetCatID()を呼び出す前に実行されるwhere()ため、外部where()呼び出しで空の$wheres配列が表示されることが予想されます。

getCatID()1 つの解決策は、2 番目のクエリを作成する前に、単独で呼び出すことです。または、インスタンスを複製Mongo_dbして、各クエリが個別に構築されるようにすることもできます。

于 2013-06-27T17:44:53.797 に答える