我按照this tutorial设置基于Yii框架的后端服务器,然后this tutorial设置我的API,一切正常。 但我不确定如何完成下一步: 我现在的返回数组是拉出如下所示的记录:
{
"id": 1,
"user_id": 1,
"description": "This is a summary of article 1",
"status": 2,
"type": 1,
"created_at": 1426210780,
"updated_at": 1426365319
}
db中'type'的值为'1',但是我希望将'type'的所有可能值存储在另一个表中,如下所示:
1 : Red
2 : Blue
3 : Green
然后我希望通过我的API返回的JSON包含“type”:'red'而不是“type”:1。我假设我需要覆盖模型中的某些内容,但我无法弄清楚要覆盖什么或使用什么。
我很高兴阅读教程或文档,但我是初学者,我不确定要搜索的术语。谢谢你的帮助!
答案 0 :(得分:1)
了解模型及其与其他模型的关系,这样您就可以获得所需的信息。
http://www.yiiframework.com/doc/guide/1.1/en/database.arr
一旦关系正常工作,您应该能够从原始模型中获取颜色。
虽然这是来自Yii的早期版本,但它可以帮助您了解模型的交互方式 http://www.yiiframework.com/wiki/285/accessing-data-in-a-join-table-with-the-related-models/
答案 1 :(得分:1)
@Burrito的回复提供了文档,但我想为其他搜索者提供完整的解决方案:
首先,我需要为'Type'设置一个模型。
其次,我需要声明“报告”(我的主要模型)和“类型”之间的关系(在我的报告模型中):
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。