我使用Yii2类yiielasticsearchActiveRecord从弹性搜索接收数据。通常,这个类中用于从elastic获取数据的方法将返回该数据作为ActiveRecord (AR)对象。所以很容易从AR中创建一个activeDataProvider来将数据填充到listview中,等等。
但是:yiielasticsearchActiveRecord::mget()不返回ar对象。相反,它返回一个文档数组。
我的问题:
是否有一种方法可以使用mget - feature/弹性多get feature并将结果作为AR对象?
或
是否有一种方法可以将该文档数组带入AR对象以使ActiveDataProvider包括listview工作?
我找到了以下解决方案:
- 使用我想要的ID列表运行Yii2 mget,它返回一个文档数组。
- 使用ArrayDataProvider类创建ActiveDataProvider和 前一步的mget-output
示例代码:
use appmodelsMyModel;
use yiidataArrayDataProvider;
$ids = ['123','456','789'];
$myModel = new MyModel(); # Data Model based on yiimongodbActiveRecord;
$result = $myModel->mget($ids); # get documents from elastic where document id is in $ids
$dataProvider = new ArrayDataProvider([
'allModels' => $result
]); # creating ActiveDataProvider, which can be used in Listviews.