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



我正在使用livewire,我想根据各自的条件显示一些数据计数结果。

但是,视图页面只显示count的1个结果,应该是4。以下是结果。

下面是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;

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

最新更新