在刀片上执行此$query
时遇到问题。我有4个计数,但是只有$projetores
和$infra_hdmi
显示结果。在这种情况下,$infra_hdmi
,另一个具有价值,但看起来好像没有在页面加载时执行。
奇怪的是,如果我更改$query
的顺序,例如将$infra_vga
放在$infra_hdmi
上方,计数工作正常。
$unidade = Input::get('unidade_id');
$bloco = Input::get('bloco_id');
$query = Projetor::where('unidade_id', $unidade);
$query->where(function($query) use ($bloco) {
if (Input::has('bloco_id')) {
$query->where('bloco_id', $bloco);
}
});
$projetores = $query->get();
$infra_hdmi = $query->where('infra', 'HDMI')->count();
$infra_vga = $query->where('infra', 'VGA')->count();
$suporte_universal = $query->where('modelo_suporte', "Universal")->count();
$suporte_outros = $query->where('modelo_suporte', "Outro")->count();
在刀片上,我像这样显示 {{$ infra_hdmi}} {{$ infra_vga}} ...
答案 0 :(得分:1)
出现此问题的原因是因为您要向同一$query
对象添加where子句。
要解决此问题,您可以做的是clone $query
,然后再添加where
子句作为计数:
$unidade = Input::get('unidade_id');
$bloco = Input::get('bloco_id');
$query = Projetor::where('unidade_id', $unidade)
->when(Input::has('bloco_id'), function ($query) use ($bloco) {
$query->where('bloco_id', $bloco);
});
$projetores = $query->get();
$infra_hdmi = (clone $query)->where('infra', 'HDMI')->count();
$infra_vga = (clone $query)->where('infra', 'VGA')->count();
$suporte_universal = (clone $query)->where('modelo_suporte', "Universal")->count();
$suporte_outros = (clone $query)->where('modelo_suporte', "Outro")->count();
我在上面的代码中也使用了when()。可以使用它代替查询构建器的if
语句。