Я последовал этому руководству, чтобы настроить мой сервер на базе Yii, а затем этот учебник для настройки моего API, и все работает так, как должно. Но я не уверен, как выполнить следующий шаг: мой массив возврата сейчас тянет записи, которые выглядят так:
{
"id": 1,
"user_id": 1,
"description": "This is a summary of article 1",
"status": 2,
"type": 1,
"created_at": 1426210780,
"updated_at": 1426365319
}
Значение для "type" равно "1" в db, но я хочу сохранить все возможные значения "type" в другой таблице следующим образом:
1 : Red
2 : Blue
3 : Green
И затем я хочу, чтобы JSON возвращался через мой API, чтобы содержать "type": "red" вместо "type": 1. Я предполагаю, что мне нужно переопределить что-то в моей модели, но я не могу понять, что переопределить или с чем.
Я рад прочитать учебники или документацию, но я такой начинающий, что не уверен, какие условия искать. Спасибо за вашу помощь!
@Burrito ответ предоставил документацию, но я хочу дать полное решение для других поисковиков:
Во-первых, мне нужно было создать модель для "Тип".
Во-вторых, мне нужно было объявить отношения между "Отчет" (моя основная модель) и "Тип", как это (в моей модели отчета):
public function getType()
{
return $this->hasOne(Type::className(), ['id' => 'type']);
}
(Я не уверен, нужен ли этот шаг, но документация делает это необходимым.)
В-третьих, я создал 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.
Посмотрите модели и их отношения с другими моделями, это позволит вам получить необходимую информацию.
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 -модель о связанной/