我在Laravel中执行此查询时出错

时间:2019-06-05 13:18:56

标签: laravel count

在刀片上执行此$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}}     ...

1 个答案:

答案 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语句。