Tahun baru, skill baru! 🚀. Masukkan kupon "skill2025" untuk diskon 30% di kelas apa saja

Cara membuat pagination pada relasi tabel laravel?

Permisi kaka, saya sudah berhasil menampilkan data dari dua tabel, tabel momenta dan posts yang terhubung pada tabel categories sesuai id-nya. permasalahnya, jika category mempunyai banyak post bagaimana cara buat pagination-nya kak? Mohon bantuannya kak. Terimakasih :)

avatar gugunguntoro
@gugunguntoro

250 Kontribusi 10 Poin

Diperbarui 7 tahun yang lalu

17 Jawaban:

laravel nyediain ko untuk pagination https://laravel.com/docs/5.5/pagination

avatar hilmanski
@hilmanski

2705 Kontribusi 2140 Poin

Dipost 7 tahun yang lalu

Controller-nya

$user = \App\User::paginate(10) // misal 10 data per page

View-nya

{{ $user->links() }} // tinggal masukan script ini pada view

avatar sptndc
@sptndc

247 Kontribusi 59 Poin

Dipost 7 tahun yang lalu

di controller artikelnya sudah saya paginate kak, tapi gak bisa kak. soalnya tabel artikel sama alamat mempunyai user_id kak.

avatar gugunguntoro
@gugunguntoro

250 Kontribusi 10 Poin

Dipost 7 tahun yang lalu

Coba liat script modelnya deh @bumiharum

avatar sptndc
@sptndc

247 Kontribusi 59 Poin

Dipost 7 tahun yang lalu

model momentum

 namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Momentum extends Model
{
  public function category()
  {
    return $this->belongsTo('App\Models\Category');
  }

  public function momentums()
  {
      return $this->hasMany('App\Models\Momentum');
  }

}

model post

 namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
  public function category()
  {
    return $this->belongsTo('App\Models\Category');
  }

  public function posts()
  {
      return $this->hasMany('App\Models\Post');
  }
}

model category

 namespace App|Models;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{

  protected $table = 'categories';

  public function momentums()
  {
    return $this->hasMany('App\Models\Momentum');
  }

  public function posts()
  {
    return $this->hasMany('App\Models\Post');
  }

}

category controller

 namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Models\Momentum;

use App\Models\Category;

use App\Models\Post;

class CategoryController extends Controller
{
  public function index($name)
  {

    $category= Category::where('name', $name)->first();

    return view('category.index', compact('category'));
  }

}
avatar gugunguntoro
@gugunguntoro

250 Kontribusi 10 Poin

Dipost 7 tahun yang lalu

disini saya menampilkan isi moment dan post sesuai categorynya kak.

avatar gugunguntoro
@gugunguntoro

250 Kontribusi 10 Poin

Dipost 7 tahun yang lalu

ini view category index kak

 @foreach ($category->posts as $post)
            <div class="card category-card">
              <div class="row">
                <div class="col-md-7">
                  <img class="img-fluid category-img" src="{{ asset('images/' . $post->image) }}" alt="" style="">
                </div>
                <div class="col-md-5 category-body">
                  <h4 class="category-h4"><a href="{{ url('blog/' . $post->slug) }}">{{ $post->title }}</a></h4>
                  <p class="category-p">{!! substr(strip_tags($post->body),0,80) !!} {{ strlen($post->body) ? '__' : '' }}</p>
                  <small class="category-small" >{{ date('F d, Y', strtotime($post->created_at)) }}</small>
                </div>
              </div>
            </div>
            @endforeach

avatar gugunguntoro
@gugunguntoro

250 Kontribusi 10 Poin

Dipost 7 tahun yang lalu

route

 Route::get('category/{name?}', ['as' => 'category.index','uses' => 'CategoryController@index']);
avatar gugunguntoro
@gugunguntoro

250 Kontribusi 10 Poin

Dipost 7 tahun yang lalu

terus itu ada error ga?

avatar sptndc
@sptndc

247 Kontribusi 59 Poin

Dipost 7 tahun yang lalu

gak ada error kak. kalo mau ditambah paginate-nya bagaimana kak?

avatar gugunguntoro
@gugunguntoro

250 Kontribusi 10 Poin

Dipost 7 tahun yang lalu

Coba kaya gini

CategoryController

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Models\Momentum;

use App\Models\Category;

use App\Models\Post;

class CategoryController extends Controller
{
  public function index($name)
  {

    $category= Category::where('name', $name)->first()->paginate(10);

    return view('category.index', compact('category'));
  }

}

Category Index

<div class="row">
    <div class="col-md-6">
      @foreach ($category->posts as $post)
      <div class="card z-depth-0" style="border-radius: 0px; border: 1.5px solid #E5E5E5; padding: 5px; margin-top: 10px;">
        <img class="card-img-top img-fluid" src="{{ asset('images/' . $post->image) }}" alt="Card image cap">
        <p><a href="{{ url('category/' . $post->category->name) }}" style="font-variant: small-caps;"><small>{{ ucwords($post->category->name) }}</small></a></p>
        <div class="card-body">
          <h5 class="card-title" style="margin-top: -33px; line-height: 30px; font-weight: bold;"><a href="{{ url('moment/' . $post->slug) }}">{{ $post->title }}</a></h5>
          <p class="card-text">{!! substr(strip_tags($post->body),0,100) !!} {{ strlen($post->body) ? '__' : '' }}</p>
          <small><i class="fa fa-calendar" aria-hidden="true"></i>  {{ $post->created_at }}</small><hr>
        </div>
      </div>

      @endforeach

      @foreach ($category->momentums as $moment)<hr>
        <div class="card z-depth-0" style="border-radius: 0px; border: 1.5px solid #E5E5E5; padding: 5px; margin-top: 10px;">
          <img class="card-img-top img-fluid" src="{{ asset('images/' . $moment->image) }}" alt="Card image cap">
          <p><a href="{{ url('category/' . $moment->category->name) }}" style="font-variant: small-caps;"><small>{{ ucwords($moment->category->name) }}</small></a></p>
          <div class="card-body">
            <h5 class="card-title" style="margin-top: -33px; line-height: 30px; font-weight: bold;"><a href="{{ url('moment/' . $moment->slug) }}">{{ $post->title }}</a></h5>
            <p class="card-text">{!! substr(strip_tags($moment->body),0,100) !!} {{ strlen($moment->body) ? '__' : '' }}</p>
            <small><i class="fa fa-calendar" aria-hidden="true"></i>  {{ $moment->created_at }}</small>
          </div>
        </div>
      @endforeach
    </div>
  </div>
{{ $category->links() }}

avatar sptndc
@sptndc

247 Kontribusi 59 Poin

Dipost 7 tahun yang lalu

tampil error seperti ini kak "Undefined property: Illuminate\Pagination\LengthAwarePaginator::$name (View: /var/www/html/metoo/resources/views/category/index.blade.php)"

avatar gugunguntoro
@gugunguntoro

250 Kontribusi 10 Poin

Dipost 7 tahun yang lalu

Coba Controller-nya gini dulu

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Models\Momentum;

use App\Models\Category;

use App\Models\Post;

class CategoryController extends Controller
{
  public function index()
  {

    $category= Category::where('name')->paginate(10);

    return view('category.index', compact('category'));
  }

}

Terus diroute yang {name?} dihapus dulu.

avatar sptndc
@sptndc

247 Kontribusi 59 Poin

Dipost 7 tahun yang lalu

tetap gak bisa kak. vaariable $name itu untuk akses parameter kak

avatar gugunguntoro
@gugunguntoro

250 Kontribusi 10 Poin

Dipost 7 tahun yang lalu

Setau ane kalo pagination itu penggunaanya seperti ini

<?php

namespace App\Http\Controllers;

use App\User;

class UserController extends Controller
{
    public function index()
    {
        $users = User::paginate(15);

        return view('user.index', ['users' => $users]);
    }
}

avatar sptndc
@sptndc

247 Kontribusi 59 Poin

Dipost 7 tahun yang lalu

soalnya saya menampilkannya berdasarkan categorynya kak. Terus bagaimana solusinya ya kak? padahal website saya dikit lagi mau jadi :(

avatar gugunguntoro
@gugunguntoro

250 Kontribusi 10 Poin

Dipost 7 tahun yang lalu

dicoba coba aja, eksperiment sendiri. ane soalnya pake pagination cuma di page home, belum sampe kesana.

avatar sptndc
@sptndc

247 Kontribusi 59 Poin

Dipost 7 tahun yang lalu

Login untuk ikut Jawaban