Yii2 REST API关系数据返回

mmv*_*sbg 4 api rest relational-database yii2

我已经使用自定义操作设置了 Yii2 REST API,一切工作正常。然而,我想做的是从 API 返回一些数据,其中包括由外键设置的数据库关系。这些关系是存在的,而且它们实际上运行正常。以下是其中一个控制器中的查询示例:

$result = \app\models\Person::find()->joinWith('fKCountry', true)
      ->where(..some condition..)->one();
Run Code Online (Sandbox Code Playgroud)

例如,仍然在控制器中,我可以调用如下内容:

$result->fKCountry->name
Run Code Online (Sandbox Code Playgroud)

当关系有效时,它会显示适当的名称。到目前为止一切顺利,但是一旦我返回return $result;从 API 客户端收到的结果,该结果fkCountry就消失了,我无法访问上面提到的名称。唯一剩下的就是指向国家/地区表的外键值。

我可以提供更多代码和信息,但我认为这足以描述问题。如何对返回的连接数据中的信息进行编码,以便 API 客户端也可以访问它?

jag*_*ler 6

像这样设置

public function actionYourAction() {
    return new ActiveDataProvider([
        'query' => Person::find()->with('fKCountry'), // and the where() part, etc.
    ]);
}
Run Code Online (Sandbox Code Playgroud)

确保您的 Person 模型中的extraFields函数包含fKCountry. 如果您还没有实现该extraFields功能,请添加它:

public function extraFields() {
    return ['fKCountry'];
}
Run Code Online (Sandbox Code Playgroud)

然后,当您调用 url 时,请确保添加参数expand来告诉您要包​​含 fkCountry 数据的操作。所以像这样:

/yourcontroller/your-action?expand=fKCountry
Run Code Online (Sandbox Code Playgroud)