Laravel中通过Eloquent按名称匹配查询一对多关联表数据
术语对应关系
开始前先明确代码中印尼语术语与中文的对应:
- Penyedia = 供应商(Vendor)
- Pekerjaan = 工程(Work)
现有环境说明
当前有两张数据表,为一对多关联关系:单个供应商可拥有多个工程,单个工程仅归属一个供应商。
- 供应商表(Vendor Table)结构:

- 工程表(Work Table)结构:

项目基于Laravel框架开发,已在供应商列表页添加操作按钮,需要实现点击按钮后展示对应名称供应商名下工程列表的功能。目前已在工程表中添加存储供应商名称的nama字段,因刚接触Laravel的Eloquent ORM,不清楚具体实现逻辑。
已编写代码
工程模型 Pekerjaan.php
namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model as Eloquent; class Pekerjaan extends Eloquent { use HasFactory; protected $guarded = []; public function penyedia(){ return $this->belongsTo('App\Models\Penyedia'); } }
供应商模型 Penyedia.php
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model as Eloquent; class Penyedia extends Eloquent { use HasFactory; protected $guarded = []; public $timestamps = false; public function pekerjaan(){ return $this->hasMany('App\Models\Pekerjaan'); } }
控制器 AdminController.php
public function showpekerjaan(){ $penyedia = penyedia::all(); return view('admin.showpekerjaan', compact('penyedia')); }
视图文件 tabelnilai_pekerjaan.blade.php
该文件为工程列表展示页,需要实现按供应商筛选展示对应工程列表的效果,当前代码如下:
<section class="content"> <div class="container-fluid"> <div class="row"> <div class="col-12"> <div class="card"> <div class="card-header"> <h3 class="card-title">Tabel Nilai Pekerjaan</h3> </div> <!-- /.card-header --> <div class="card-body table-responsive"> <table id="tabelpekerjaan" class="table table-bordered"> <thead> <tr> <th style="width: 10px">No.</th> <th>Paket Pekerjaan</th> <th>Nama Perusahaan</th> <th>Lokasi Pekerjaan</th> <th>HPS</th> <th>Nilai Kontrak</th> <th style="width: 120px">Aksi</th> </tr> </thead> <tbody> @php $no = 1; @endphp @foreach ($penyedia as $penyedias) <tr> <td>{{$no++}}</td> <td>{{$penyedias->pekerjaan->pekerjaan}}</td> <td>{{$penyedias->pekerjaan->nama}}</td> <td>{{$penyedias->pekerjaan->lokasi}}</td> <td>Rp. {{number_format($pekerjaans->pekerjaan->hps,0,',',',')}}</td> <td>Rp. {{number_format($pekerjaans->pekerjaan->nilai_kontrak,0,',',',')}}</td> <td> <a href="#" type="button" class="btn btn-primary btn-block btn-outline-primary">Edit</a> </td> </tr> @endforeach </tbody> </table> </div> <!-- /.card-body --> </div> <!-- /.card --> </div> </section>
待解决问题
现有代码需要新增、修改或调整哪些内容,才能实现点击按钮展示对应供应商名下工程列表的需求?
内容的提问来源于stack exchange,提问作者YuPi
相关产品推荐
相关产品推荐

