У меня ошибка выполнения этого запроса в Laravel - PullRequest
0 голосов
/ 05 июня 2019

У меня проблема при выполнении этого $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 Ответ

1 голос
/ 05 июня 2019

Причина, по которой вы столкнулись с этой проблемой, заключается в том, что вы добавляете оператор where в один и тот же объект $query.

Что вы можете сделать, чтобы обойти это, это клон $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();

Я также использовал когда () в приведенном выше коде. Это можно использовать вместо if операторов с построителем запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...