@捲餅的響應提供的文件,但我想給完整的解決方案的其它搜:
首先,我需要爲'Type'設置一個模型。
其次,我需要申報「報告」(我的主要模式)和「類型」這樣的(在我的報告模型)之間的關係:
public function getType()
{
return $this->hasOne(Type::className(), ['id' => 'type']);
}
(我不知道如果這一步,是必要的,但documentation使得它看起來必需)
第三,我創建getTypeName(在報表模型),要獲得類型的基礎上,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 /列表中,我得到的報告陣列,包括類型名稱。
謝謝,這個信息很有幫助。我對於不知道2.0有什麼不同有點小心,但是我想在2.0中還沒有很多文檔和教程。 – 2015-03-26 00:35:55
好的,我遵循該文檔,實際上也找到了2.0文檔。我已經建立了模型和關係,現在我可以在視圖中成功使用getTypeName,並顯示「紅色」作爲類型。 但API沒有使用視圖,它是(我認爲)使用findOne()方法並回顯結果。我沒有把getTypeName放入的地方。我如何修改默認函數(findOne?),所以當我通過API拉取'報告'時,我不會將'type'返回爲1,而是將'type'返回爲'red'? 感謝您的幫助! – 2015-03-26 03:32:11