You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 21:18:02