Я заполняю базу двумя seeders
Так выглядит база после первого seeder
Admin у все 0
Вторым seeder мне нужно назначить каждому юзеру админа, но так что бы уровень вложенности не превышал 7.
public function run()
{
$faker = Faker\Factory::create('uk_UA');
$limit = 501;
for ($i = 1; $i < $limit; $i++) {
$employees = Employee::find($i);
if ($i == 1) { //admin сам себе admin
$head_id = 1;
} else {
$head_id = $this->check_admin($i);
}
$employees->head_id = $head_id;
$employees->save();
}
}
public function check_admin($current_user) {
while(in_array( ($rand_id = random_int(1,500)), array($current_user) ) ); // exept own id
$deleteSybm = ["[", "]"]; // не обращать внимания
$head_id = str_replace( $deleteSybm, '' , Employee::where('id', $rand_id)->pluck('head_id'));
$count_level = $this->count_level($rand_id, 0);
if ($head_id == 0) {
return $rand_id;
}
if ($count_level == "false_out") { // больше 7
return $this->check_admin($current_user); // with return goes OUT
} else {
return $rand_id;
}
}
public function count_level($rand_id, $level) {
$max_lavel = 7;
$deleteSybm = ["[", "]"]; // не обращать внимания
$head_id = str_replace( $deleteSybm, '' , Employee::where('id', $rand_id)->pluck('head_id'));
if($level >= $max_lavel) {
return "false_out";
}
$level++;
return $this->count_level($head_id, $level);
}
}
Вроде не сложно
Генерим random id, смотрим на юзера с этим id, смотрим есть ли у него admin, если нет назначаем random id, если есть то считаем дальше, если так повторяется больше 7 возвращаемся на первый пункт
Но у меня почему то все равно после второго seedera уровень вложенности превышен
Помогите кто чем может, уже неделю не могу понять в каком месте накосячил