目前我在Yii2框架上玩REST API。我已经建立了基本功能并取消了一些主题。
public function actions()
{
// GET ACTIONS
$actions = parent::actions();
// UNSET ACTIONS
unset($actions['delete'], $actions['create']);
// CUSTOM FUNCTION FOR INDEX
$actions['index']['prepareDataProvider'] = [$this, 'actionIndex'];
return $actions;
}
我添加了自定义功能,目前只是原版的副本。
public function actionIndex()
{
/* @var $modelClass \yii\db\BaseActiveRecord */
$modelClass = $this->modelClass;
return new ActiveDataProvider([
'query' => $modelClass::find(),
]);
}
这称为DB表产品。现在我想在localhost/api/v1/products/1
上获得产品ID 1
并返回:
<response>
<id>1</id>
<product>Product 1</product>
</response>
我也有产品关系表,我希望我的API返回
<response>
<id>1</id>
<product>Product 1</product>
<related>
<id>2</id>
<id>5</id>
</related>
</response>
我不知道如何修改整个功能而不仅仅是数据提供者准备。我需要做2个SQL查询 - 第一个用于获取产品数据,第二个用于获取相关产品和合并主题作为响应。
先谢谢你的回答。
答案 0 :(得分:0)
您可以在模型中添加fields()
和extraFields()
方法,以按照此处的说明实现此目的:http://www.yiiframework.com/doc-2.0/guide-rest-resources.html#fields
因此,在您的情况下,您可以使用:
public function extraFields() {
return ['__relation_name_here__'];
}