Intereting Posts
Как отслеживать время пользователя на сайте Как отформатировать дату UTC для использования указателя зоны Z (Zulu) в php? вычислить время, когда солнце находится на X градусов ниже / выше горизонта Что считается длительным временем выполнения? Symfony 2 Forward Request, проходящий по параметрам GET / POST Как обновить веб-страницу без перезагрузки веб-страницы с помощью AJAX? php ftp проверить, существует ли папка всегда возвращать папку создания ошибок Ошибка PHP mySQL Password с дополнительными символами Regex заменить все вхождения одного символа в определенные маркеры laravel 5.1 говорит для всех других маршрутов, что кроме ('/'), что 404 страница не найдена на онлайн-сервере Amazon с использованием ec2 php – это скомпилированный язык или интерпретируемый язык? Вставьте один HTML-файл в другой файл HTML java регулярное выражение для комментария php Force PDF скачать с PHP – файл поврежден в Windows Как получить несколько строк из базы данных в PHP

Рекурсивная функция PHP Laravel с вложенным массивом

Я использую Laravel 4 с MySQL back-end.

Я хочу хранить записи nested array в базу данных с помощью recursive function .

Входной массив выглядит следующим образом:

 Array ( [0] => Array ( 'id' => 561, 'type' => 'q', 'subtype' => 'boolean', 'title' => 'Did you..?', 'parent' => 560, 'created_at' => '2014-07-09 09:45:50', 'updated_at' => NULL, 'deleted_at' => NULL, 'children' => Array ( [0] => Array ( 'id' => 562, 'type' => 'o', 'subtype' => NULL, 'title' => 'Yes', 'parent' => 561, 'created_at' => '2014-07-09 09:45:50', 'updated_at' => NULL, 'deleted_at' => NULL, 'children' => Array ( ) ) [1] => Array ( 'id' => 563, 'type' => 'answer', 'subtype' => NULL, 'title' => 'No', 'parent' => 561, 'created_at' => '2014-07-09 09:45:50', 'updated_at' => 'NULL', 'deleted_at' => NULL, 'children' => Array ( ) ) ) ) ) 

recursive function которую я использую, хранит записи в базе данных:

 public function addRecursiveChildren(array $surveychildren, $parentid, $userid){ foreach ($surveychildren as $item) { /* Error : HTTPRequest Error :: 500: {"error":{"type":"ErrorException","message":"Cannot use a scalar value as an array Error is in the statement below in the second recursion when child is passes as an input. */ $item['survey_id'] = $item['id']; $item['user_id'] = $userid; $item['id'] = null; $item['parent'] = $parentid; $routine = routine::create($item); if(count($item["children"]) > 0) { foreach ($item["children"] as $child) { /* The $child I found is as below : $child = array( 'id' => 562, 'type' => 'o', 'subtype' => NULL , 'title' => 'Yes', 'parent' => 561, 'created_at' => '2014-07-09 09:45:50', 'updated_at' => NULL, 'deleted_at' => NULL, 'children' => Array ( ) ); */ RoutineRepository::addRecursiveChildren($child, $routine->id, $userid); } } } } 

Редактировать :

Я знаю, что причиной ошибки является $child я передаю как input array в recursive function выше:

$child выглядит примерно так:

 array( 'id' => 562, 'type' => 'o', 'subtype' => NULL , 'title' => 'Yes', 'parent' => 561, 'created_at' => '2014-07-09 09:45:50', 'updated_at' => NULL, 'deleted_at' => NULL, 'children' => Array ( ) ) 

Вместо этого, если $child будет примерно таким:

 Array ( [0] => array( 'id' => 562, 'type' => 'o', 'subtype' => NULL , 'title' => 'Yes', 'parent' => 561, 'created_at' => '2014-07-09 09:45:50', 'updated_at' => NULL, 'deleted_at' => NULL, 'children' => Array ( ) ) ) 

Тогда ошибки не будет.

Может ли кто-нибудь помочь мне преодолеть это?

Благодарю.

Это должно работать

 class Routine extends \Eloquent { // The relation public function subRoutine() { return $this->hasMany('Routine', 'parent'); } public function saveSubroutine(array $children) { foreach($children as $childData) { $child = new self($childData); $this->subRoutine()->save($child); $child->saveSubroutine($childData['children']); } } } $routine = Routine::create($data); $routine->saveSubroutine($data['children']);