#php #laravel #laravel-4
#php #ларавель #laravel-4
Вопрос:
Я использую Laravel 4
. Я нахожусь на начальном этапе, поэтому я не полностью осведомлен об особенностях PHP
, а также Laravel
о фреймворке.
У меня есть массив, который извлекается из таблицы, как показано ниже :
$result = model::all();
это дает :
[0]=>[
[id]=>1
[name]=>"abc"
[description]="temp"
[tempfield1]="t1"
[tempfield2]="t2"
[tempfield3]="t3"
]
[1]=>[
[id]=>1
[name]=>"xyz"
[description]="temp2"
[tempfield1]="t21"
[tempfield2]="t22"
[tempfield3]="t23"
]
... and so on.
Теперь я хочу сгенерировать JSON из этого массива примерно так :
"items":[{
"id": 1,
"name":"abc",
"description":"temp",
"temps":[{
"temp1":"t1",
"temp2":"t2",
"temp3":"t3",
}]
},
{
"id": 2,
"name":"xyz",
"description":"temp2",
"temps":[{
"temp1":"t21",
"temp2":"t22",
"temp3":"t23",
}]
}
... and so on
]
Для достижения этой цели я создал класс элементов, который имеет свойства Id, name и description.
Class Item{
public $id;
public $name;
public $description;
}
Также был создан временный класс, который расширяет класс элемента и имеет свойства temp1, temp2 и temp3.
Class Temp extends Item{
public $temp1;
public $temp2;
public $temp3;
}
Моя идея состоит в том, чтобы создать список типов class Temp
и создать foreach
цикл, который извлекает каждую запись из приведенного выше массива и заполняет объект Temp
класса соответствующими свойствами, а затем я добавлю этот объект в список. Например,
$list = array();
foreach ($result as $row){
$objTemp = new Temp();
$objTemp->id = $row["id"];
$objTemp->name = $row["name"];
$objTemp->description= $row["description"];
$objTemp->temp1= $row["tempfield1"];
$objTemp->temp2= $row["tempfield2"];
$objTemp->temp3= $row["tempfield3"];
list->push($objTemp);
}
И тогда моей идеей было преобразовать список в JSON. Но мне не удалось этого добиться. Даже print_r($objTemp)
дает мне список в виде плоской структуры, а не с вложенными временными полями.
Кто-нибудь может помочь мне получить вложенный JSON, используя этот плоский массив, пожалуйста?
Заранее благодарю..
Комментарии:
1. Я думаю, что для Laravel пока нет доступных экспертов по переполнению стека. .NET лучше, чем Laravel.
Ответ №1:
В вашем контроллере просто поместите:
return Response::json($result);
Но вы должны определить связь между Item и temp (что-то вроде):
Class Item extends Eloquent{
public $id;
public $name;
public $description;
public function temps()
{
return $this->hasMany('Temp','user_id', 'user_id');
}
}
Комментарии:
1. ОК. Но в этом случае, где я должен заполнить объект «Temp» элементами array ()?
2. Ну, я думаю, вам следует сохранить во временных «id» и «name» (или аналогичных) и нормализовать свою базу данных (даже если вы знаете, что храните максимум 3 временных параметра) мое мнение
3. Для меня это невозможно, так как я хочу создать больше классов, расширяющих класс элементов, имеющих одинаковые свойства Name, Id и Описание, но разные в каждом классе.
4. Тогда вы должны определить каждое свойство (имя, идентификатор, описание) для каждого класса, ничего страшного