Daftar dan Belajar Sekarang!

Menampilkan data relasi one to many laravel

foto masridh
3 Kontribusi 0 Coto
6 hari yang lalu
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. https://i.ibb.co/NSQW7gS/Screenshot-1.png 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. https://i.ibb.co/6FKLkzd/Screenshot-2.png

Jawaban
foto beckbella
61 Kontribusi 35 Coto
5 hari yang lalu
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


Login untuk diksusi di forum sekolah koding