Yii2 Restful And Elasticsearch

Hi,

I’m developing a restful web service with Yii2 and elasticsearch as search engine.

I’ve declared an ActiveRecord (for ElasticSearch) named “Table”, and if I send a get request to take a list of all tables I got the following error:




[error][yii\base\UnknownPropertyException] exception 'yii\base\UnknownPropertyException' with message 'Getting unknown property: app\models\Table::_id' in /var/www/api/vendor/yiisoft/yii2/base/Component.php:142

Stack trace:

#0 /var/www/api/vendor/yiisoft/yii2/db/BaseActiveRecord.php(246): yii\base\Component->__get('_id')

#1 /var/www/api/vendor/yiisoft/yii2/base/Model.php(896): yii\db\BaseActiveRecord->__get('_id')

#2 /var/www/api/vendor/yiisoft/yii2/data/ActiveDataProvider.php(137): yii\base\Model->offsetGet('_id')

#3 /var/www/api/vendor/yiisoft/yii2/data/BaseDataProvider.php(81): yii\data\ActiveDataProvider->prepareKeys(Array)

#4 /var/www/api/vendor/yiisoft/yii2/data/BaseDataProvider.php(91): yii\data\BaseDataProvider->prepare()

#5 /var/www/api/vendor/yiisoft/yii2/rest/Serializer.php(161): yii\data\BaseDataProvider->getModels()

#6 /var/www/api/vendor/yiisoft/yii2/rest/Serializer.php(130): yii\rest\Serializer->serializeDataProvider(Object(yii\data\ActiveDataProvider))

#7 /var/www/api/vendor/yiisoft/yii2/rest/Controller.php(97): yii\rest\Serializer->serialize(Object(yii\data\ActiveDataProvider))

#8 /var/www/api/vendor/yiisoft/yii2/rest/Controller.php(75): yii\rest\Controller->serializeData(Object(yii\data\ActiveDataProvider))

#9 /var/www/api/vendor/yiisoft/yii2/base/Controller.php(148): yii\rest\Controller->afterAction(Object(yii\rest\IndexAction), Object(yii\data\ActiveDataProvider))

#10 /var/www/api/vendor/yiisoft/yii2/base/Module.php(460): yii\base\Controller->runAction('index', Array)

#11 /var/www/api/vendor/yiisoft/yii2/web/Application.php(82): yii\base\Module->runAction('table/index', Array)

#12 /var/www/api/vendor/yiisoft/yii2/base/Application.php(369): yii\web\Application->handleRequest(Object(yii\web\Request))

#13 /var/www/api/web/index.php(12): yii\base\Application->run()

#14 {main}



I don’t get that error if the GET request contains the table id,

but it works properly with mysql db, so I’m able to get all tables or only one.

Any ideas please?

Thanks

It looks like you are extending the ActiveRecord class!


\yii\elasticsearch\ActiveRecord

you need to define the property:


protected $_id;

I was in the same situation , and I fixed it overriding controller’s index action like this :

query = new \yii\elasticsearch\Query();

/**

*you can build your filters here

*/

return new ActiveDataProvider([

        'query' => $query,


    ]);

I know this isn’t the best way to fix it , but it works .