@danilaka25

Laravel: Как заполнить фейкером базу с учетом ограничения уровня вложенности юзеров?

Я заполняю базу двумя seeders

Так выглядит база после первого seeder
5f0c9a7a25332779606724.png
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 уровень вложенности превышен
5f0c9d93ae894199485819.png

Помогите кто чем может, уже неделю не могу понять в каком месте накосячил
  • Вопрос задан
  • 111 просмотров
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
non progredi est regredi
ничо не понятно

выкинь все и оставь вопрос про отношения админ - не админ - рекурсия
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы