Мне нужно скопировать мульти родителя и его детей и его детей. Я не хочу делать вставку foreach для каждого ребенка. Каков оптимальный способ сделать это с минимальным количеством обращений к базе данных?
<code>For example query database :
<pre>
Array
(
[0] => Array
(
[id] => 137
[title] => Father
[father_id] => 0
[code] => 03
[status] => 1
[children] => Array
(
[0] => Array
(
[id] => 2344
[title] => child
[father_id] => 137
[code] => 01
[status] => 1
[children] => Array
(
[0] => Array
(
[id] => 138
[title] => child 2
[father_id] => 2344
[code] => 01
[status] => 1
)
)
)
[1] => Array
(
[id] => 2857
[title] => child
[father_id] => 137
[code] => 02
[status] => 1
)
)
)
)
Скопированный, конечно, получит новый идентификатор, а многие скопированные связанные элементы получат новый. ID и обновите соответствующий столбец. Например, у Part будет обновлен идентификатор, будет обновлен папа-идентификатор.
<code>code php
<pre>
function getparent($Parent) {
// find id first Array[0] copy and --> create new id <--
$copy = Section::find($Parent)->replicate();
$copy->toArray();
$copy->save();
// query All child's
$Parent_s = Section::select('father_id','id')->where('father_id', $Parent)->get();
foreach ($Parent_s as $value) {
// Relationship collection
$subresult = getparent($value->id);
if (count($subresult) > 0) {
$value['children'] = $subresult;
}
// My problem child array
if(!$value['children']) {
$copys = Section::find($value->id)->replicate();
// Add new id father in field Father_id
$copys->father_id = $copy->id;
$copys->toArray();
$copys->save();
}
}
unset($value);
return $Parent_s;
}
// id father for clone database
getparent($request->id);