Laravel 8中如何正确使用WhereIn查询获取BankSettlement数据
错误原因
调用get()方法获取$konfirmasi时,返回的是Eloquent集合实例,而非单条数据模型,因此无法直接通过->id访问属性,这是报错的根本原因。
正确实现方案
分两种业务场景选择对应写法:
- 场景1:每个邮箱仅对应一条
KonfirmasiPembayaran数据
将get()替换为first()直接获取单条模型,再读取id属性即可,同时增加判空逻辑避免空指针报错:
public function detail(Peserta $peserta) { // 获取konfirmasi单条数据 $konfirmasi = KonfirmasiPembayaran::where('email', $peserta->email)->select('id')->first(); $payments = collect(); if ($konfirmasi) { $payments = BankSettlement::where('konfirmasi_id', $konfirmasi->id)->get(); } $tagihan = Tagihan::where([['peserta_id', $peserta->id], ['type', 3]])->first(); return view('data.peserta.detail', ['data' => $peserta, 'payments' => $payments,'tagihan' => $tagihan]); }
- 场景2:一个邮箱可对应多条
KonfirmasiPembayaran数据
如果确实需要匹配多条记录,用pluck()方法直接提取集合中所有id组成数组,直接传给whereIn即可:
public function detail(Peserta $peserta) { // 提取所有匹配的konfirmasi_id组成数组 $konfirmasiIds = KonfirmasiPembayaran::where('email', $peserta->email)->pluck('id'); $payments = BankSettlement::whereIn('konfirmasi_id', $konfirmasiIds)->get(); $tagihan = Tagihan::where([['peserta_id', $peserta->id], ['type', 3]])->first(); return view('data.peserta.detail', ['data' => $peserta, 'payments' => $payments,'tagihan' => $tagihan]); }
内容的提问来源于stack exchange,提问作者Hilmi
相关产品推荐
相关产品推荐

