「1 対多」関係の検索フォーム/基準を作成するにはどうすればよいですか。たとえば、「群衆が 10.000 を超えるすべてのチームを選択する」としましょう。
MongoDbの基本的なアクティブ レコードとしてMongoRecord 拡張機能 ( http://www.yiiframework.com/extension/mongorecord/ ) を使用しています。
mongo db のコレクションに基づいて、Yii で GridView を作成しました (私にとってはうまくいきます)。私のドキュメントのコレクションの 1 つは、次のような構造になっています。
{
_id":1,
"teamId":2453,
"teamName":"Team A",
"competition":["Competition A","Competition B"],
"matches":
[
{
"_id":147852,
"crowd":10234,
"yellowCards":2,
"scorers" [{....}]
....
}
]
...
}
私の文書:
$teams = MongoTeam::model()->findAll();
My dataProvider is:
$dataProvider=new CArrayDataProvider($teams, array(
'id'=>'_id',
'sort'=>array(
'attributes'=>array(
'_id', 'teamId', 'teamName', 'matches', ...
),
),
'pagination'=>array(
'pageSize'=>20,
),
));
$this->render('index', array('dataProvider'=>$dataProvider));
ビューには、次のようなものがあります。
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
'columns'=>array(
array(
'name' => 'Team ID',
'type' => 'raw',
'value' => 'CHtml::encode($data->teamID)'
),
array(
'name' => 'Team Name',
'type' => 'raw',
'value' => 'CHtml::encode($data->teamName)'
),
...
しかし、サブドキュメントの条件を使用してフィルターを作成することはできません (私の場合: "一致")。他の mongoDB 拡張機能/モジュールなどは使用したくありません。英語が下手で申し訳ありません。