在 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;
我个人建议让它更加动态,但现在这应该能让你的计数正常工作。
我正在使用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;
我个人建议让它更加动态,但现在这应该能让你的计数正常工作。