Я использую 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']);