Как подсказал @rypskar, вы должны использовать рекурсию.
Я предлагаю вам использовать анонимную функцию , которая будет использовать себя внутри нее (которая называется closure
) и делать что-то вроде этого:
$userId = Auth::user()->id;
$getChildOf = function ($parent) use ($userId, &$getChildOf) {
$company = \App\CompanyBasic::whereRaw('user_id = ' . $userId . " AND parent_id = " . $parent)->get();
$companies = false;
if ($company->isNotEmpty()) {
$companies = array();
foreach ($company as $single_company) {
$companies[] = array(
'id' => $single_company->id,
'comp_name' => $single_company->comp_name,
'child' => $getChildOf($single_company->id),
);
echo "company id: " . $single_company->id . "<br>";
}
}
return $companies;
};
$companies = $getChildOf(0);
Здесь анонимная функция передается переменной $getChildOf
, которая используется для себя.
Я удалил вашу переменную $count
, чтобы упростить код.
Кстати, вы должны понимать, что этот код будет формировать запрос к базе данных на каждой итерации, что существенно увеличит нагрузку на сервер
Кроме того, внедрение переменных в запросы SQL с конкатенацией небезопасно и считается плохой практикой. Вам следует рассмотреть возможность использования подготовленных заявлений