如何为“一对多”关系创建搜索表单/条件:让我们说“选择所有拥有人群的团队> 10.000”。
我使用MongoRecord扩展名(http://www.yiiframework.com/extension/mongorecord/)作为MongoDb的基本活动记录。
我基于mongo db的集合创建了一个带有Yii的GridView(它适用于我)。 我的一个文档集合有这样的结构:
{
_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扩展/模块等。 谢谢,抱歉我的英语不好。
答案 0 :(得分:0)
$query=array(
'matches.crowd'=>array('$gt'=>10000),
'matches.$'=>1
);
$teams = MongoTeam::model()->findAll($query);
你可以这样使用。但是你不能使用这样的数据提供者。因为它会在$ teams var中生成太多行。您必须使用数据提供者的标准。我正在用YiiMongoDbSuite做它,它有EMongoCriteria和EMongoDataProvider类来完成它。