在 livewire 中以不同条件在一页中显示多个数据计数结果的问题

Problem in showing multiple data count results in one page with different condition in livewire

我正在使用livewire,我想根据各自的情况显示一些数据统计结果..

但是查看页面只显示了1个计数结果,应该是4个。Here's the result..

下面是 livewire 渲染组件中的代码行:

$prospek = Prospek::orderby('prospek.id', 'desc');
     
        if($this->status == 'baru')
        {
            $prospek = $prospek->where('status_donor', $this->status);
            $data ['ket'] = "Prospek";
        } 
        
        if($this->status == 'donatur')
        {
            $prospek = $prospek->where('status_donor', $this->status);
            $data ['ket'] = "Donatur";
        } 
        
        if($this->status == 'nonaktif')
        {
            $prospek = $prospek->where('status_donor', $this->status);
            $data ['ket'] = "Non Aktif";
        }
        
        if($this->status == 'hapus')
        {
            $prospek = $prospek->where('status_donor', $this->status);
            $data ['ket'] = "Dihapus";
        }

        if($this->cariNama != null ){
            $prospek = $prospek->where('nama','LIKE', '%'.$this->cariNama.'%');
        }
        
        if($this->cariHp != null ){
            $prospek = $prospek->where('hp', 'LIKE', '%'.$this->cariHp.'%');
        }

        $data ['prospek'] = $prospek->paginate($this->jumlahBaris);

        $data ['jmlBaru'] = $prospek->where('status_donor', 'baru')->count();
        $data ['jmlDonatur'] = $prospek->where('status_donor', 'donatur')->count();
        $data ['jmlNonAktif'] = $prospek->where('status_donor', 'nonaktif')->count();
        $data ['jmlHapus'] = $prospek->where('status_donor', 'hapus')->count();

        return view('livewire.donatur.tabel-donatur', $data);

这里是 blade 文件中的代码行:

<button type="button" data-dismiss="modal" wire:click="status(0)" data-toggle="tab"
        href="#donatur">
        Prospek {{ number_format($jmlBaru, 0, ',', '.') }}</button>
    <button type="button" data-dismiss="modal" wire:click="status(1)" data-toggle="tab"
        href="#donatur">
        Donatur {{ number_format($jmlDonatur, 0, ',', '.') }}</button>
    <button type="button" data-dismiss="modal" wire:click="status(2)" data-toggle="tab"
        href="#donatur">
        Non Aktif {{ number_format($jmlNonAktif, 0, ',', '.') }}</button>
    <button type="button" data-dismiss="modal" wire:click="status(3)" data-toggle="tab"
        href="#donatur">
        Dihapus {{ number_format($jmlHapus, 0, ',', '.') }}</button>

谁能告诉我应该怎么做?

这与 Livewire 无关,但纯粹与 Laravel 以及您使用查询构建器的方式有关。

在第一行,您设置了查询: $prospek = Prospek::orderby('prospek.id', 'desc');。 然后,对于每个 if 语句,您向查询添加条件。然后,最后,你想获得每个不同状态的计数。

但是,您在获取计数之前向查询添加了条件。如果您要转储查询(\DB::enableQueryLog() 在开始查询之前,dd(\DB::getQueryLog()) 在完成最后一个查询之后),您会看到每个条件都已添加。基本上,您的 jmlHapus 将是一个 Prospek,它必须具有 4 个查询状态中的每一个(如果我看到您的代码,这将永远不会发生)。

相反,您可以执行以下操作:

$counts = $prospek->selectRaw('status_donor, COUNT(*) as count')
    ->groupBy('status_donor')
    ->pluck('count', 'status_donor');

现在 $counts 将是一个集合,其中每个键是状态,值是计数。

然后,您可以像这样简单地设置您的值:

$data['jmlBaru'] = $counts['baru'] ?? 0;
$data['jmlDonatur'] = $counts['donatur'] ?? 0;
$data['jmlNonAktif'] = $counts['nonaktif'] ?? 0;
$data['jmlHapus'] = $counts['hapus'] ?? 0;

我个人建议让它更加动态,但现在这应该能让你的计数正常工作。