Yii2 RESTful 关系数据

编程入门 行业动态 更新时间:2024-10-27 22:29:48
本文介绍了Yii2 RESTful 关系数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我在获取 Yii2 RESTful API 返回关系数据时遇到了一些问题.通过前端查看时,我可以正常工作,但我试图通过 API 获取相同的数据,但它的工作方式不同.

I am having some trouble getting the Yii2 RESTful API returning relational data. I have this working when viewed through the frontend but i am trying to get the same data through the API and its not working the same way.

表格country - PK 是population_idpopulation - 外键是 country.population_id

Tables country - PK is population_id population - Foreign Key is country.population_id

我收到此错误:

{ "success": false, "data": { "name": "Invalid Configuration","message": "\"query\" 属性必须是一个类的实例实现 QueryInterface 例如yii\db\Query 或其子类.",代码":0,类型":yii\base\InvalidConfigException",文件":"C:\xampp\htdocs\AdvancedAPI\vendor\yiisoft\yii2\data\ActiveDataProvider.php",行":100,堆栈跟踪":[#0C:\xampp\htdocs\AdvancedAPI\vendor\yiisoft\yii2\data\BaseDataProvider.php(79):yii\data\ActiveDataProvider->prepareModels()", "#1C:\xampp\htdocs\AdvancedAPI\vendor\yiisoft\yii2\data\BaseDataProvider.php(92):yii\data\BaseDataProvider->prepare()", "#2C:\xampp\htdocs\AdvancedAPI\vendor\yiisoft\yii2\rest\Serializer.php(162):yii\data\BaseDataProvider->getModels()", "#3C:\xampp\htdocs\AdvancedAPI\vendor\yiisoft\yii2\rest\Serializer.php(131):yii\rest\Serializer->serializeDataProvider(Object(yii\data\ActiveDataProvider))",#4C:\xampp\htdocs\AdvancedAPI\vendor\yiisoft\yii2\rest\Controller.php(97):yii\rest\Serializer->serialize(Object(yii\data\ActiveDataProvider))",#5C:\xampp\htdocs\AdvancedAPI\vendor\yiisoft\yii2\rest\Controller.php(75):yii\rest\Controller->serializeData(Object(yii\data\ActiveDataProvider))",#6C:\xampp\htdocs\AdvancedAPI\vendor\yiisoft\yii2\base\Controller.php(153):yii\rest\Controller->afterAction(Object(yii\base\InlineAction),对象(yii\data\ActiveDataProvider))", "#7C:\xampp\htdocs\AdvancedAPI\vendor\yiisoft\yii2\base\Module.php(455):yii\base\Controller->runAction('index', Array)", "#8C:\xampp\htdocs\AdvancedAPI\vendor\yiisoft\yii2\web\Application.php(83):yii\base\Module->runAction('v1/country/inde...', Array)", "#9C:\xampp\htdocs\AdvancedAPI\vendor\yiisoft\yii2\base\Application.php(375):yii\web\Application->handleRequest(Object(yii\web\Request))", "#10C:\xampp\htdocs\AdvancedAPI\api\web\index.php(17):yii\base\Application->run()", "#11 {main}" ] } }

{ "success": false, "data": { "name": "Invalid Configuration", "message": "The \"query\" property must be an instance of a class that implements the QueryInterface e.g. yii\db\Query or its subclasses.", "code": 0, "type": "yii\base\InvalidConfigException", "file": "C:\xampp\htdocs\AdvancedAPI\vendor\yiisoft\yii2\data\ActiveDataProvider.php", "line": 100, "stack-trace": [ "#0 C:\xampp\htdocs\AdvancedAPI\vendor\yiisoft\yii2\data\BaseDataProvider.php(79): yii\data\ActiveDataProvider->prepareModels()", "#1 C:\xampp\htdocs\AdvancedAPI\vendor\yiisoft\yii2\data\BaseDataProvider.php(92): yii\data\BaseDataProvider->prepare()", "#2 C:\xampp\htdocs\AdvancedAPI\vendor\yiisoft\yii2\rest\Serializer.php(162): yii\data\BaseDataProvider->getModels()", "#3 C:\xampp\htdocs\AdvancedAPI\vendor\yiisoft\yii2\rest\Serializer.php(131): yii\rest\Serializer->serializeDataProvider(Object(yii\data\ActiveDataProvider))", "#4 C:\xampp\htdocs\AdvancedAPI\vendor\yiisoft\yii2\rest\Controller.php(97): yii\rest\Serializer->serialize(Object(yii\data\ActiveDataProvider))", "#5 C:\xampp\htdocs\AdvancedAPI\vendor\yiisoft\yii2\rest\Controller.php(75): yii\rest\Controller->serializeData(Object(yii\data\ActiveDataProvider))", "#6 C:\xampp\htdocs\AdvancedAPI\vendor\yiisoft\yii2\base\Controller.php(153): yii\rest\Controller->afterAction(Object(yii\base\InlineAction), Object(yii\data\ActiveDataProvider))", "#7 C:\xampp\htdocs\AdvancedAPI\vendor\yiisoft\yii2\base\Module.php(455): yii\base\Controller->runAction('index', Array)", "#8 C:\xampp\htdocs\AdvancedAPI\vendor\yiisoft\yii2\web\Application.php(83): yii\base\Module->runAction('v1/country/inde...', Array)", "#9 C:\xampp\htdocs\AdvancedAPI\vendor\yiisoft\yii2\base\Application.php(375): yii\web\Application->handleRequest(Object(yii\web\Request))", "#10 C:\xampp\htdocs\AdvancedAPI\api\web\index.php(17): yii\base\Application->run()", "#11 {main}" ] } }

模型(Country.php):

model (Country.php):

<?php namespace api\modules\v1\models; use \yii\db\ActiveRecord; class Country extends ActiveRecord { public static function tableName() { return 'country'; } public function getCountries() { //return $this->hasMany(Population::className(), ['population_id' => 'population_id']); return $this->hasMany(Country::className(), ['population_id' => 'population_id']); } public function getPopulationNumber() { //return $this->hasOne(Country::className(), ['population_id' => 'population_id']); return $this->hasOne(Population::className(), ['population_id' => 'population_id']); } }

模型(Population.php):

model (Population.php):

<?php namespace api\modules\v1\models; use \yii\db\ActiveRecord; class Population extends ActiveRecord { /** * @inheritdoc */ public static function tableName() { return 'population'; } /** * @inheritdoc */ public static function primaryKey() { return ['p_id']; } }

控制器(CountryController.php):

controller (CountryController.php):

<?php namespace api\modules\v1\controllers; use yii\rest\Controller; use yii\data\ActiveDataProvider; use api\modules\v1\models\Country; class CountryController extends Controller { public function actionIndex() { $query = Country::find()->with('countries', 'populationNumber')->all(); //$query = Country::find(); return new ActiveDataProvider([ 'query' => $query, ]); } }

推荐答案

您需要从查询中删除 all() 部分.所以代码应该是:

You need to remove all() part from your query. So the code should be:

<?php namespace api\modules\v1\controllers; use yii\rest\Controller; use yii\data\ActiveDataProvider; use api\modules\v1\models\Country; class CountryController extends Controller { public function actionIndex() { $query = Country::find()->with('countries', 'populationNumber'); //$query = Country::find(); return new ActiveDataProvider([ 'query' => $query, ]); } }

更多推荐

Yii2 RESTful 关系数据

本文发布于:2023-08-03 15:32:54,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1287998.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:关系   数据   RESTful

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!