Рекурсия PHP и фреймворк Laravel

298
23 декабря 2017, 06:47

Здравствуйте, имеется следующий код, но код отрабатывает только для третьего уровня вложенности, как заставить его работать до неограниченного кол-ва уровней вложенности?

public function users()
{
    return $this->hasMany(UserFollower::class, 'user_id', 'follower_id');
}
public function matrix($user, $follower)
{
    $followers = UserFollower::where('user_id', $follower->user->id)
        ->get();
    if($followers->count() < 2):
        $follower = new UserFollower([
            'user_id' => $follower->user->id,
            'follower_id' => $user->id
        ]);
        $follower->save();
        return 'success';
    else:
        foreach($followers as $follower):
            if($follower->users->count() == 2):
                continue;
            else:
                $follower = new UserFollower([
                    'user_id' => $follower->user->id,
                    'follower_id' => $user->id
                ]);
                $follower->save();
                return 'success';
            endif;
            $this->matrix($user, $follower);
        endforeach;
    endif;
}
public function store(Request $request)
{
    /* Регистрируем пользователя */
    $user = New User($request->all());
    $user->save();
    /* Матрица */
    $followers = UserFollower::where('user_id', Auth::user()->id)
        ->get();
    if($followers->count() < 2):
        $follower = new UserFollower([
            'user_id' => Auth::user()->id,
            'follower_id' => $user->id
        ]);
        $follower->save();
    else:
        foreach($followers as $follower):
            if($follower->users->count() == 2):
                continue;
            else:
                $follower = new UserFollower([
                    'user_id' => $follower->user->id,
                    'follower_id' => $user->id
                ]);
                $follower->save();
                break;
            endif;
            if($this->matrix($user, $follower) == 'success') break;
        endforeach;
    endif;
    /* Редирект */
    return Redirect::back()
        ->with('message', 'Статус выполнения: 200');
}
READ ALSO
Как проверить подключение к БД в MODx revo

Как проверить подключение к БД в MODx revo

Как проверить подключение к удаленной БД на MODx revo, если подключаюсь через redbeanphp (ORM)

294
Проверить 100к url взятых из txt файла на 404 php

Проверить 100к url взятых из txt файла на 404 php

Есть большое количество urlНеобходимо проверить, какие ещё существуют, а какие нет

283
Где найти файл tempale.php в Bitrix

Где найти файл tempale.php в Bitrix

Приветствую! Подскажите, новичку в Bitrix, где найти файл tempalephp? Я с этой CMS раньше не работала

395
Swiftmailer.Uncaught Error: Call to undefined method Swift_SmtpTransport::newInstance()

Swiftmailer.Uncaught Error: Call to undefined method Swift_SmtpTransport::newInstance()

Всем приветПомогите пожалуйста разобраться с ошибкой, которую я получаю

307