@Burrito 的回复提供了文档,但我想为其他搜索者提供完整的解决方案:
首先,我需要为“类型”设置一个模型。
其次,我需要像这样声明“报告”(我的主要模型)和“类型”之间的关系(在我的报告模型中):
public function getType()
{
return $this->hasOne(Type::className(), ['id' => 'type']);
}
(我不确定这一步是否必要,但documentation 似乎是必要的。)
第三,我创建了 getTypeName(在 Report 模型中),根据 ID 获取类型的名称:
public function getTypeName($type = null)
{
return Type::findOne($type)->name;
}
最后,在我的 apiController 中,我修改了用于获取所有记录的函数,为每个调用 getTypeName 的记录包含一个循环:
protected function findAllReports()
{
// get all reports
$reports = Report::find()
->asArray()
->all();
if( $reports ){
$i = 0;
// loop through each report
foreach($reports as $report){
$model = new Report();
// add a new key/value pair to each report array, populate with getTypeName and pass the type ID to it as a parameter
$reports[$i]['typeName'] = $model->getTypeName($reports[$i]['type']);
$i++;
}
return $reports;
} else {
// error or no results
}
}
作为参考,这里需要的另一个例程是 API 命中的操作,它调用 findAllReports():
public function actionList()
{
$reports=$this->findAllReports();
$this->setHeader(200);
echo json_encode(array('status'=>1,'data'=>$reports),JSON_PRETTY_PRINT);
}
最后,现在如果我调用 [url]/api/list,我会得到一个报告数组,包括 typeName。