[Laravel] Pagination met Many-to-Many

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 07-10 19:27

Matis

Rubber Rocket

Topicstarter
Beste PRGers,

Op dit moment ben ik bezig met het ontwikkelen van een in-house web-applicatie waarin collega's kunnen zoeken in welke van onze software welke specifieke paketten gebruikt worden.

In MySQL heb ik de volgende twee tabellen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        Schema::create('manifests', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('job_name');
            $table->string('git_branch');
            $table->timestamps();
        });

        Schema::create('packages', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('architecture');
            $table->string('version');

            $table->unique(['name', 'architecture', 'version']);
        });


Deze twee worden gekoppeld middels de volgende tabel:
PHP:
1
2
3
4
5
6
7
        Schema::create('manifest_package', function (Blueprint $table) {
            $table->unsignedInteger('manifest_id')->nullable();
            $table->unsignedInteger('package_id')->nullable();

            $table->foreign('manifest_id')->references('id')->on('manifests')->onDelete('cascade');
            $table->foreign('package_id')->references('id')->on('packages')->onDelete('cascade');
        });


Standaard wordt er een overzichtspagina getoond waarin alle combinaties tussen software (manifest) en bijbehorende pakketten getoond worden.
Omdat dit overzicht (naar verwachting) vrij snel zal groeien, heb ik ervoor gekozen pagination toe te passen op de resultaten.

Ik haal de resultaten uit de database en geef ze door aan de view:
PHP:
1
2
3
4
5
6
7
    /* Niet relevante code is verwijderd */
    public function index(Request $request)
    {
        $package_builder = Package::with('manifests');
        $package = $package_builder->paginate(25);
        return view('manifest.index', compact('package'));
    }

Ik toon de data middels de volgende view
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
                @foreach($package as $p)
                    @foreach($p->manifests as $m)
                    <tr>
                        <td>{{ $p->name }}</td>
                        <td>{{ $p->architecture }}</td>
                        <td>{{ $p->version }}</td>
                        <td>{{ $m->name }}</td>
                        <td>{{ $m->job_name }}</td>
                        <td>{{ $m->git_branch }}</td>
                        <td>{{ $m->created_at }}</td>
                        <td>{{ $m->updated_at }}</td>
                    </tr>
                    @endforeach
                @endforeach


Het probleem waar ik nu tegenaan loop is dat er netjes 25 pakketten per pagina getoond worden, maar omdat ook alle manifests getoond worden. Derhalve wordt de lijst vele malen langer dan de beoogde 25 resultaten per pagina.

Ik ben op zoek naar een manier hoe ik kan zorgen dat er maar 25 rijen per pagina getoond worden.

Wanneer ik op het internet zoek kom ik de volgende vragen tegen:Het verschil tussen bovenstaande vragen en mijn vraag is dat in bovenstaande problemen maar één manifest gevraagd wordt en dan passen ze pagination toe op de packages.

Ik hoop dat jullie met mij mee kunnen denken.

Alvast bedankt!

Matis

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • TJVB
  • Registratie: Januari 2008
  • Laatst online: 06-10 14:09
Je wilt eigenlijk een pagination op je koppeltabel uitvoeren. Mijn gevoel zegt dat je het beste daarvoor een model kunt aanmaken. Daarop kun je wel pagination uitvoeren.
Of je kunt gebruik maken van de query builder en daarmee paginaten maar dan moet je lastiger doen om er objecten van te maken.

Acties:
  • 0 Henk 'm!

  • _Moe_
  • Registratie: Mei 2006
  • Laatst online: 04-08 14:45
Is het niet logischer dat je een overzicht van je manifests geeft, om vervolgens in detail pas de packages gekoppeld aan 1 manifest te tonen? of andersom natuurlijk.

RTFM!


Acties:
  • +1 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 07-10 19:27

Matis

Rubber Rocket

Topicstarter
_Moe_ schreef op woensdag 22 november 2017 @ 15:25:
Is het niet logischer dat je een overzicht van je manifests geeft, om vervolgens in detail pas de packages gekoppeld aan 1 manifest te tonen? of andersom natuurlijk.
Sorry voor mijn late reactie.

Ik ben uiteindelijk voor jouw oplossing gegaan, alleen dan andersom.

De index toont alle pakketten en daarop kun je doorklikken naar welke manifests deze versie hebben.

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • winkbrace
  • Registratie: Augustus 2008
  • Laatst online: 24-08 15:17
Geheel ter zijde is dit overigens een leuke use case voor een grafendatabase, zoals neo4j

[ Voor 3% gewijzigd door winkbrace op 01-12-2017 14:21 ]