Как правильно отобразить данные в матрице MLM систем в Laravel?

Уважаемые знатоки!

У меня есть проект реализующий матричную MLM систему на 5 мест на фреймворке Laravel. Возникла проблема с отображением из Базы данных в матрицу, для этой реализации использую библиотеку по этой ссылке https://github.com/nepster-web/php-mlm-matrix. Прочитав документацию, я понял как это делать, но не понял до конца как это реализовать с интеграцией баз данных. На данный момент функцию отображение из баз данных выглядит таким образом:

    if($matrix->isFilled() === true) {
        throw new FilledMatrixException();
    }
    $matrixArray = $matrix->toArray();

    $matrix->addTenant(null, function(Coord $coord)
    {   
        $matrixFind = Matrix::join('matrix_users', 'matrix_users.matrix_id', '=', 'matrix.matrix_id')
                            ->join('users', 'users.user_id', '=', 'matrix_users.user_id')
                            ->get();
        $matrixFindArray = $matrixFind->toArray();
        $array = array();
        for ($i = 0; $i < count($matrixFindArray); $i++) { 
            $value = [
                'user_id'   => $matrixFindArray[$i]['user_id'],
                'name'      => $matrixFindArray[$i]['user_name'],
                'depth'     => $matrixFindArray[$i]['depth'],
                'number'    => $matrixFindArray[$i]['number'],
            ];
            array_push($array, $value);
        }
        dd($array);
            
        MatrixService::drawTree($array, $userID);

        return [
            'user_id'   => $userID,
            'name'      => $userName,
        ];
        
    });

При отображении он берет первую или последнюю запись и дублирует остальным пустым ячейкам в матрице именно количеством. Также подскажите способ сохранения в БД эти данные; дело в том что оно работает не таким образом: к примеру если его нет в бд, то его записывают в пустую ячейку матрицы и запись попадает с новыми значениями. Часть кода выглядит таким образом:

  if($matrix->isFilled() === true) {
        throw new FilledMatrixException();
    }
    $matrixArray = $matrix->toArray();

    $matrix->addTenant(null, function(Coord $coord)
    {   
        $matrixFind = Matrix::join('matrix_users', 'matrix_users.matrix_id', '=', 'matrix.matrix_id')
                            ->join('users', 'users.user_id', '=', 'matrix_users.user_id')
                            ->get();
        $matrixFindArray = $matrixFind->toArray();
        for ($i = 0; $i < count($matrixFindArray); $i++) { 
            return [
                'user_id'   => $matrixFindArray[$i]['user_id'],
                'name'      => $matrixFindArray[$i]['user_name'],
            ];
        }
    });

    foreach ($matrixArray as $d => $depth) {                    
        foreach ($depth as $n => $number) {       
            $userID = $number['user_id'];    
            if($matrix->hasTenant(new Coord($d, $n)) === true) {
                if($number !== null) {
                    $result = Matrix::create([
                        'parent_id' => $d,
                        'date_create'   => date('Y-m-d'),
                        'filled'        => $matrix->isFilled(),
                    ]);
                    $result->matrixUsers()->create([
                        'user_id'   => $number['user_id'],
                        'depth'     => $d,
                        'number'    => $n,
                        'date'      => date('Y-m-d'),
                    ]);
                }
            }
            
        }
    }

Как можно эти вещи реализовать, просто сроки сдачи проекта подходит к концу.


Ответы (0 шт):