首页 > 解决方案 > 如何使用 Eloquent 使查询构建器语法变得更简单

问题描述

我有 3 个名为 laporan、laporrankategori_anak、laporankategori_induk 的表看起来像这样

点击这里
我想从 kategorilaporan_induk 访问数据,这是我的模型

Laporan models

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Laporan extends Model
{
    use HasFactory;
    protected $table = 'laporan';

    public static function getLaporanUser(int $limit, $id_user)
    {
        $laporan = self::orderBy('waktu_dibuat', 'desc')->paginate($limit)->where('id_user', $id_user);
        return $laporan;
    }

    public function getUser()
    {
        return $this->belongsTo('App\Models\User', 'id_user');
    }
    
    public function getKategori()
    {
        return $this->belongsTo('App\Models\KategoriLaporanAnak', 'id_kategori');
    }
}


分类LaporanAnak 模型

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class KategoriLaporanAnak extends Model
{
    use HasFactory;
    
    protected $table = 'kategorilaporan_anak';
    protected $primaryKey = 'id_kategori';

    public function getKategoriInduk()
    {
        return $this->belongsTo('App\Models\KategoriLaporanInduk', 'id_induk');
    }

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


分类LaporanInduk 模型

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class KategoriLaporanInduk extends Model
{
    use HasFactory;
    
    protected $table = 'kategorilaporan_induk';

    public $timestamps = false;

    protected $fillable = [
        'name',
    ];

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


这是我在 LaporanController 上的显示功能

public function show($id)
    {
        $laporan = DB::table('laporan')
                    ->join('kategorilaporan_anak', 'laporan.id_kategori', '=', 'kategorilaporan_anak.id_kategori')
                    ->join('kategorilaporan_induk', 'kategorilaporan_anak.id_induk', '=', 'kategorilaporan_induk.id')
                    ->select('*', 'kategorilaporan_induk.nama')->where('laporan.id', $id)
                    ->get();

        return view('laporan.show')->with('laporan', $laporan);
    }


问题是,当我想显示表 kategorilaporan_induk 中的数据时,我正在使用查询生成器。
但我想使用 Eloquent,所以代码更容易阅读。
如果我们使用 eloquent,你们知道语法如何吗?

标签: phplaraveleloquent

解决方案


推荐阅读