通过ID获取多个文档作为ActiveRecord在Yii2从现实搜索使用mget()



我使用Yii2类yiielasticsearchActiveRecord从弹性搜索接收数据。通常,这个类中用于从elastic获取数据的方法将返回该数据作为ActiveRecord (AR)对象。所以很容易从AR中创建一个activeDataProvider来将数据填充到listview中,等等。

但是:yiielasticsearchActiveRecord::mget()不返回ar对象。相反,它返回一个文档数组。

我的问题:
是否有一种方法可以使用mget - feature/弹性多get feature并将结果作为AR对象?

是否有一种方法可以将该文档数组带入AR对象以使ActiveDataProvider包括listview工作?

我找到了以下解决方案:

  1. 使用我想要的ID列表运行Yii2 mget,它返回一个文档数组。
  2. 使用ArrayDataProvider类创建ActiveDataProvider和
  3. 前一步的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.

最新更新