Paginacja na zwykłej tablicy

0

Mam taki problem zawsze robilem paginacje przez pobranie danych przez model i na końcu zamiast get() dałem paginate(15) , a teraz muszę zrobić to na zwykłej tablicy to jak pobiorę moje dane to potem je jeszcze obrabiam w innej funkcji i teraz moje pytanie co muszę zrobić, żeby paginacje zrobić w inny sposób.

Mój kod wygląda tak.

     public function createQuestion(Request $request,$bool = false) {
         $startDay = $this->startDay;
         $moodModel = new  MoodModel;
         $moodModel->createQuestions($this->startDay);

         $moodModel->setDate($request->get("dateFrom"),$request->get("dateTo"),$this->startDay);
         $moodModel->setMood($request);
         $moodModel->setLongMood($request);
         $this->setHour($moodModel,$request);
         if (!empty($request->get("whatWork")) ) {
             $moodModel->searchWhatWork($request->get("whatWork"));
         }
         if (!empty($request->get("action")) and ($request->get("action") != "undefined") ) {

             $moodModel->searchAction($request->get("action"),(array)$request->get("actionFrom"),(array)$request->get("actionTo"));
         }
         if (($request->get("ifAction")) == "on" ) {
             $moodModel->actionOn();
         }
         if (($request->get("ifWhatWork")) == "on" ) {
             $moodModel->whatWorkOn();
         }
         $moodModel->idUsers($this->idUsers);
         $moodModel->moodsSelect();
         $moodModel->groupByAction();

         if ($request->get("sort2") == "asc") {
             $moodModel->orderBy("asc",$request->get("sort"));
         }
         else {
             $moodModel->orderBy("desc",$request->get("sort"));
         }
         $this->count = $moodModel->questions->get()->count();
         if ($bool == false) {
            return $moodModel->questions->paginate(15);
         }
         else {
             return $moodModel->questions->get();
         }

I teraz tutaj w momencie jak zmienna $bool będzie true to dalej będzie to obrabiane przez inną funkcję.

Po tej fukncji jest jeszcze ta funkcja wykonywana

     public function groupActionDay($list) {
             $i = 0;
             $j = 0;
             $array =[];
             $sumLong = 0;
             $sumMood = 0;
             $how = 0;
             $sumAnxienty = 0;
             $sumVolatge = 0;
             $sumStimulation = 0;
             $sumEpizodes = 0;
         for ($i=0;$i < count($list);$i++) {

             if ($i == 0) {

                 $array[$j]["datEnd"] = $list[$i]->datEnd;
      
             }
               if ($i != 0  and $list[$i]->datEnd != $list[$i-1]->datEnd ) {
                 $array[$j]["count"] = $how;
                 $array[$j]["mood"] = ($sumMood / $sumLong);
                 $array[$j]["anxienty"] =$sumAnxienty / $sumLong;
                 $array[$j]["voltage"] = $sumVolatge / $sumLong;
                 $array[$j]["stimulation"] = $sumStimulation / $sumLong;
                 $array[$j]["longMood"] = $sumLong;
                 $array[$j]["epizodes_psychotik"] = $sumEpizodes;
                 $array[$j]["id"] = $list[$i]->id;

                 $j++;

                 $array[$j]["datEnd"] = $list[$i]->datEnd;
                 $sumMood = 0;
                 $sumAnxienty = 0;
                 $sumVolatge = 0;
                 $sumStimulation = 0;
                 $sumLong = 0;
                 $how = 0;
                 
             }
             
                $sumMood += ($list[$i]->level_mood * $list[$i]->longMood);
                $sumAnxienty += ($list[$i]->level_anxiety * $list[$i]->longMood);
                $sumVolatge += ($list[$i]->level_nervousness * $list[$i]->longMood);
                $sumStimulation += ($list[$i]->level_stimulation * $list[$i]->longMood);
                $sumLong += $list[$i]->longMood;
                $sumEpizodes += $list[$i]->epizodes_psychotik;

                $how++;

             if ($i == count($list)-1) {
                  $array[$j]["count"] = $how;
                 $array[$j]["mood"] = ($sumMood / $sumLong);
                 $array[$j]["anxienty"] =$sumAnxienty / $sumLong;
                 $array[$j]["voltage"] = $sumVolatge / $sumLong;
                 $array[$j]["stimulation"] = $sumStimulation / $sumLong;
                 $array[$j]["epizodes_psychotik"] = $sumEpizodes;
                 $array[$j]["longMood"] = $sumLong;
                 $array[$j]["id"] = $list[$i]->id;
             }
             
         }
         return $array;
     }

I teraz jak można wywołać paginacje na tablicy $array ?

0

Przekaż w parametrze numer strony oraz wielkość strony (to możesz zapisać w sesji czy gdzieś).
I przy zwracaniu wyniku wybierz odpowiedni zakres tablicy (używając array_slice na przykład).

0

zwyczajnie jak masz tablice to daj do collection i zrob sobie funkcje paginate

use Illuminate\Pagination\Paginator;
use Illuminate\Support\Collection;
use Illuminate\Pagination\LengthAwarePaginator;

$data = $this->paginate($yourArray);

public function paginate($items, $perPage = 5, $page = null, $options = [])
  {
      $page = $page ?: (Paginator::resolveCurrentPage() ?: 1);
      $items = $items instanceof Collection ? $items : Collection::make($items);
      return new LengthAwarePaginator($items->forPage($page, $perPage), $items->count(), $perPage, $page, $options);
  }
0
chomikowski napisał(a):

zwyczajnie jak masz tablice to daj do collection i zrob sobie funkcje paginate

use Illuminate\Pagination\Paginator;
use Illuminate\Support\Collection;
use Illuminate\Pagination\LengthAwarePaginator;

$data = $this->paginate($yourArray);

public function paginate($items, $perPage = 5, $page = null, $options = [])
  {
      $page = $page ?: (Paginator::resolveCurrentPage() ?: 1);
      $items = $items instanceof Collection ? $items : Collection::make($items);
      return new LengthAwarePaginator($items->forPage($page, $perPage), $items->count(), $perPage, $page, $options);
  }

Jest nivy wszystko dobrze tylko jak klikam na numery paginacji w widoku

To przeskakuje do localhost na główną stronę apacha, i doczytałem, że w tym przypadku trzeba dodać instrukcję $data->withPath(route('search.searchMoodSubmit')); .
Dodałem i teraz mam przy przemiszczaniu się stron paginacji błąd.

Trying to access array offset on value of type null (View: /var/www/html/nastroj_2021/resources/views/Users/Search/Mood/searchResultMoodGroupAction.blade.php)


Jeszcze może dam kod widoku paginacji.

<div class="d-flex justify-content-center">
       @php
                $arrayList->appends(['sort'=>Request::get('sort')])
                ->appends(['moodFrom'=>Request::get("moodFrom")])
                ->appends(['moodTo'=>Request::get("moodTo")])
                ->appends(['anxientyFrom'=>Request::get("anxientyFrom")])
                ->appends(['anxientyTo'=>Request::get("anxientyTo")])
                ->appends(['voltageFrom'=>Request::get("voltageFrom")])
                ->appends(['voltageTo'=>Request::get("voltageTo")])
                ->appends(['stimulationFrom'=>Request::get("stimulationFrom")])
                ->appends(['stimulationTo'=>Request::get("stimulationTo")])
                ->appends(['dateFrom'=>Request::get("dateFrom")])
                ->appends(['dateTo'=>Request::get("dateTo")])
                ->appends(['timeFrom'=>Request::get("timeFrom")])
                ->appends(['timeTo'=>Request::get("timeTo")])
                ->appends(['groupDay'=>'on'])
                ->appends(['longMoodHourFrom'=>Request::get("longMoodHourFrom")])
                ->appends(['longMoodMinuteFrom'=>Request::get("longMoodMinuteFrom")])
                ->appends(['longMoodHourTo'=>Request::get("longMoodHourTo")])
                ->appends(['longMoodMinuteTo'=>Request::get("longMoodMinuteTo")])
                ->appends(["action" => Request::get("action")])
                ->appends(["actionFrom" => Request::get("actionFrom")])
                ->appends(["actionTo" => Request::get("actionTo")])
                ->appends(["whatWork" => Request::get("whatWork")])
                ->appends(['epizodesFrom'=>Request::get("epizodesFrom")])
                ->appends(['epizodesTo'=>Request::get("epizodesTo")])
                ->appends(['ifWhatWork'=>Request::get("ifWhatWork")])
                ->appends(['ifAction'=>Request::get("ifAction")])
                ->appends(['sort2'=>Request::get("sort2")])
                ->links();
            @endphp
            {{$arrayList}}
        </div>
0

A nie latwiej ci bedzie zrobic
$arrayList->appends(Request::except(['_tooken', 'inne_pola_ktorych_nie_chcesz])
wtedy masz jedna linijke tylko bo z tego co widze nazwy pol sa takie same jak nazwy kluczy
https://laravel.com/docs/9.x/requests#retrieving-a-portion-of-the-input-data

0

To jest ta linijka


    <br>

    <div class='tableSearchMood' id="ajaxData">
        <div class="titleSearchResult titleSearchResultMood">WYSZUKIWANIE</div>

        @for ($i=0;$i < count($arrayList);$i++)

            @if ($i == 0 or $arrayList[$i]["datEnd"] != $arrayList[$i-1]["datEnd"])
                <div class="moodSearchResult">
                    <div class="dayMood">Dzień  {{$arrayList[$i]["datEnd"]}}</div>
                    <div style="margin-left: 5%; margin-right: 5%; margin-top: 2%; margin-bottom: 1%;">

To jest ta linijka

<div class="dayMood">Dzień  {{$arrayList[$i]["datEnd"]}}</div>
0

ale to czemu myslisz ze $arrayList to tablica ? A to nie jest obiekt ?
Nie uzywaj tez for ($i bla bla)

<br>

    <div class='tableSearchMood' id="ajaxData">
        <div class="titleSearchResult titleSearchResultMood">WYSZUKIWANIE</div>

        @foreach ($arrayList as $key => $value)

            @if ($key == 0 or $value->datEnd != $arrayList[$key-1]->datEnd)
                <div class="moodSearchResult">
                    <div class="dayMood">Dzień  {{ $value->datEnd }}</div>
                    <div style="margin-left: 5%; margin-right: 5%; margin-top: 2%; margin-bottom: 1%;">

No i ogolnie to masz klasy i id powinny byc class="table-search-mood" id="ajax-data" nie powinno byc zadnego style=" tylko wszystko w css. I nie stosuje sie %

0

Może to coś pomoże.

                $result = $SearchMood->createQuestion($request,true);

                // w tym miejscu była by tablica
                $newArray = $SearchMood->groupActionDay($result);
     
                //ale tutaj nie wiem czy tablica. bo jest wykonywana funkcja paginate.
                $data = $this->paginate($newArray,15);
                $data->withPath(route('search.searchMoodSubmit'));
                if ($SearchMood->count > 0) {
                    $arrayPercent = $SearchMood->sortMoodsGroupAction($newArray);
                } else {
                    $arrayPercent = [];
                }
                return View("Users.Search.Mood.searchResultMoodGroupAction")->with("arrayList", $data)->with("count", $SearchMood->count)->with("percent", $arrayPercent);
            

1 użytkowników online, w tym zalogowanych: 0, gości: 1