Menampilkan data relasi one to many laravel

Selamat pagi teman-teman. Saya mau tanya tentang relasi one to many di Laravel. Saat ini saya memiliki tabel kategoris dengan model Kategori dan tabel kodes dengan model Kode. Disini saya memiliki relasi One to Many dimana satu data kategori, akan memiliki banyak data di tabel kodes. Berikut ini gambaran relasinya.

Yang mau saya tanyakan adalah bagaimana menampilkan data kode di tabel beserta kategorinya berdasarkan tabel kategori?

Berikut model untuk Kode.

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Kode extends Model
{
    protected $table = 'kodes';

    protected $fillable = [
        'nama_barang',
        'kode_barang',
        'kategori_id',
    ];

    public function kategori()
    {
        return $this->belongsTo(Kategori::class);
    }
}

Dan ini adalah model untuk kategorinya.

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use App\Kode;

class Kategori extends Model
{
    protected $table = "kategoris";

    protected $fillable = [
        "kategori",
        "kode_kategori",
    ];

    public $timestamp = false;

    public function kode()
    {
        return $this->hasMany(Kode::class);
    }
}

Untuk controllernya adalah ini.

<?php

namespace App\Http\Controllers;

use App\Kategori;
use App\Kode;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class HomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    public function index()
    {
        $kategoris = Kategori::all();
        $lokasis = DB::table('lokasis')->paginate(3);
        $kodes = DB::table('kodes')->paginate(3);

        return view('dashboard.index', [
            'kategoris'         =>          $kategoris,
            'lokasis'           =>          $lokasis,
            'kodes'             =>          $kodes,
        ]);
    }
}

Saya mencoba langsung menampilkannya di view dengan kode ini.

<table class="table">
                    <thead>
                        <tr>
                            <th>Nama Barang</th>
                            <th>Kode Barang</th>
                            <th>Kategori Barang</th>
                        </tr>
                    </thead>
                    <tbody>
                        @foreach($kodes as $kode)
                            <tr>
                                <td>{{ $kode->nama_barang }}</td>
                                <td>{{ $kode->kode_barang }}</td>
                                <td>{{ $kode->kategori->kategori }}</td>
                            </tr>
                        @endforeach
                    </tbody>
                </table>

Dan hasilnya menampilkan error dengan keterangan

Facade\Ignition\Exceptions\ViewException Undefined property: stdClass::$kategori (View: C:\...\resources\views\dashboard\index.blade.php)

Yang saya inginkan adalah menampilkan nama kategorinya di card Kode Barang. Saya baru bisa menampilkan id nya saja.

avatar rdhwnal
@rdhwnal

3 Kontribusi 0 Poin

Diperbarui 4 tahun yang lalu

1 Jawaban:

setau saya untuk menggunakan fitur Relation laravel kayak hasMany, etc. pas manggil tablenya harus pake Eloquent juga, jangan pake DB::table() tentu si ->kategori gak ke defined

avatar beckbella
@beckbella

68 Kontribusi 38 Poin

Dipost 4 tahun yang lalu

Login untuk ikut Jawaban