简体   繁体   English

如何在 Laravel 8 中使用 WhereIn 查询

[英]How to Use WhereIn Query in Laravel 8

Controller控制器

    public function detail(Peserta $peserta)
    {
        // get konfirmasi_id
        $konfirmasi = KonfirmasiPembayaran::where('email',$peserta->email)->select('id')->get();

        $payments   = BankSettlement::whereIn('konfirmasi_id',array($konfirmasi->id))->get();
        // dd($payments);
        $tagihan    = Tagihan::where([['peserta_id', $peserta->id],['type', 3]])->first();
        return view('data.peserta.detail', ['data' => $peserta, 'payments' => $payments,'tagihan' => $tagihan]);
    }

I want to display data from BankSettlement based on konfirmasi_id.我想根据 konfirmasi_id 显示来自 BankSettlement 的数据。 Here I try to use WhereIn Query like this, but still error "Property [id] does not exist on this collection instance.".在这里,我尝试像这样使用 WhereIn 查询,但仍然错误“此集合实例上不存在属性 [id]。”。

确认变量

$konfirmasi has data like the image above. $konfirmasi 有如上图所示的数据。

What is the correct way to display data from BankSettlement based on konfirmasi_id ?根据 konfirmasi_id 显示来自 BankSettlement 的数据的正确方法是什么? Thankyou谢谢

Try this changes:试试这个改变:

    $konfirmasi = KonfirmasiPembayaran::where('email',$peserta->email)->pluck('id')->toArray();

    $payments   = BankSettlement::whereIn('konfirmasi_id',$konfirmasi)->get();

This is the wrong way to change a collection to array.这是将集合更改为数组的错误方法。 $payments=BankSettlement::whereIn('konfirmasi_id',array($konfirmasi->id))->get();

You should do this你应该做这个

public function detail(Peserta $peserta)
    {
        // get konfirmasi_id
        $konfirmasi = KonfirmasiPembayaran::where('email',$peserta->email)
                         ->select('id')
                         ->get()
                         ->pluck('id')
                         ->toArray(); //This will return an array of ids

        $payments   = BankSettlement::whereIn('konfirmasi_id',$konfirmasi)->get();
        // dd($payments);
        $tagihan    = Tagihan::where([['peserta_id', $peserta->id],['type', 3]])->first();
        return view('data.peserta.detail', ['data' => $peserta, 'payments' => $payments,'tagihan' => $tagihan]);
    }

Edit: Read Laravel Collections|Pluck编辑:阅读Laravel Collections|Pluck

If you do not have to reuse the result of $konfirmasi then it would be better to use subquery.如果您不必重用$konfirmasi的结果,那么最好使用子查询。 Writing a subquery is optimized way.编写子查询是优化的方式。 if you write two different query then there will be two seperate database connection request.如果您编写两个不同的查询,那么将有两个单独的数据库连接请求。

Laravel subquery Laravel 子查询

$konfirmasi = KonfirmasiPembayaran::where('email',$peserta->email)->select('id');

$payments   = BankSettlement::whereIn('konfirmasi_id', $konfirmasi )->get();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM