Как реализовать алгоритм древовидной структуры с уровнями в Laravel?

#php #laravel #algorithm

#php #laravel #алгоритм

Вопрос:

Я попробовал код уровня 1, но не понимаю, как реализовать дальнейшие уровни и получить команду пользователя, мне нужна помощь в этом…

Процесс:

  • Пользователь A создаст профиль с помощью прямой регистрации.
  • Если пользователь зарегистрирует себя как direct, то он находится на верхнем уровне, тогда пользователь A поделится ссылкой ref, чтобы присоединиться к пользователям, тогда другой пользователь будет добавлен в команду пользователя A как пользователь B.
  • Если пользователь B предоставит кому-либо ссылку ref, этот пользователь будет добавлен под пользователем A как пользователь C.
  • Таким образом, уровень пользователя A будет равен 1.

Я попытался завершить уровень 1, и код приведен ниже. Нужна помощь на всех других уровнях до 20 и как получить команду пользователя A, B, C … N

Проверьте изображение ниже, чтобы понять древовидную структуру: введите описание изображения здесь

             $ref_code_value = Session::get('ref_code');
           
            if($ref_code_value) {
                $ref_user = User::where('ref_code', $ref_code_value)->first();
                if($ref_user) {
                    $direct_user = new DirectUser();
                    $direct_user-> user_id = $ref_user-> id;
                    $direct_user-> direct_user_id = $user->id;
                    $direct_user->save();

                    $ref_user_right = RefUser::whereNull('user_id_right')->latest('updated_at')->first();
                    $ref_user_left = RefUser::whereNull('user_id_left')->latest('updated_at')->first();

                    if($ref_user_right){
                        $ref_user_right-> user_id_right = $user->id;
                        $ref_user_right->save();
                    }else{
                        if($ref_user_left){
                            $ref_user_left-> user_id_left = $user->id;
                            $ref_user_left->save();
                        }
                        else{
                            $ref_user_right = RefUser::latest('updated_at')->first();
                            $ref_users = new RefUser();
                            $ref_users-> user_id = $ref_user_right-> user_id_right;
                            $ref_users->user_id_right = $user-> id;
                            $ref_users->save();
                        }
                    }
                }
            }
            else{
                $ref_users = new RefUser();
                $ref_users-> user_id = $user->id;
                $ref_users->save();
            }

  

Комментарии:

1. Вы используете какой-нибудь ORM, например Doctrine?

2. @Cid Нет, я не использую это.

Ответ №1:

  1. Вам нужно добавить parent_id (по умолчанию= 0) в пользовательскую таблицу

  2. В пользовательской модели вам нужно добавить отношение

     protected $with = ['children'];
    
    public function children()
    {
       return $this->hasMany(User::class, 'parent_id', 'id');
    }
      

Это вернет все дерево в вашем запросе.

И для демонстрации вам нужен рекурсивный метод