Laravel中如何根据登录用户展示关联的子数据?
解决方案
方法一:修改查询构建器,过滤当前登录用户
你的getAnak方法目前查询了所有用户的孩子数据,只需添加where条件限定当前登录用户ID即可:
public function getAnak(){ $currentUserId = auth()->id(); // 获取当前登录用户ID $dataanak = DB::table('users as I') ->select('A.id_anak', 'A.nama_anak','A.tempat_lhr','A.tgl_lhr','A.bb_lahir','A.tb_lahir','A.jenis_kelamin','A.jenis_persalinan','A.tempat_persalinan','A.dokter','A.NIK_anak') ->leftjoin('anaks as A', 'I.id', '=', 'A.id_ibu') ->where('I.id', $currentUserId) // 新增条件:仅查询当前用户的孩子数据 ->get(); return view('user.dataanak', compact('dataanak')); }
方法二:使用Eloquent关联(推荐)
Laravel的Eloquent ORM更适合处理模型关联,代码更简洁易维护:
定义模型关联
在User模型中添加关联方法:// app/Models/User.php public function anaks() { return $this->hasMany(Anak::class, 'id_ibu', 'id'); }若未创建
Anak模型,新建app/Models/Anak.php:// app/Models/Anak.php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Anak extends Model { protected $table = 'anaks'; protected $primaryKey = 'id_anak'; }修改控制器方法
直接通过当前用户模型获取关联的孩子数据:public function getAnak(){ $dataanak = auth()->user()->anaks; // 直接获取当前用户的所有孩子 return view('user.dataanak', compact('dataanak')); }
在视图中展示孩子数据
在user.dataanak视图中循环遍历数据即可:
<div class="row"> @foreach($dataanak as $anak) <div class="col-lg-4 mb-4"> <div class="card"> <div class="card-body"> <h5>Nama Anak: {{ $anak->nama_anak }}</h5> <p>Tempat Lahir: {{ $anak->tempat_lhr }}</p> <p>Tanggal Lahir: {{ $anak->tgl_lhr }}</p> <!-- 按需展示其他字段 --> </div> </div> </div> @endforeach </div>
内容的提问来源于stack exchange,提问作者Lanz King
相关产品推荐
相关产品推荐

