Ao usar, ->get()
você não pode simplesmente usar qualquer um dos itens abaixo:
if (empty($result)) { }
if (!$result) { }
if ($result) { }
Porque se você dd($result);
perceber que uma instância de Illuminate\Support\Collection
sempre é retornada, mesmo quando não há resultados. Essencialmente, o que você está verificando é o $a = new stdClass; if ($a) { ... }
que sempre retornará verdadeiro.
Para determinar se existem resultados, você pode executar um dos seguintes procedimentos:
if ($result->first()) { }
if (!$result->isEmpty()) { }
if ($result->count()) { }
if (count($result)) { }
Você também pode usar em ->first()
vez de ->get()
no construtor de consultas que retornará uma instância do primeiro modelo encontrado ou de null
outra forma. Isso é útil se você precisar ou estiver esperando apenas um resultado do banco de dados.
$result = Model::where(...)->first();
if ($result) { ... }
Notas / Referências
Informações sobre bônus
As diferenças Collection e Query Builder podem ser um pouco confusas para os iniciantes no Laravel, porque os nomes dos métodos geralmente são os mesmos entre os dois. Por esse motivo, pode ser confuso saber em quem você está trabalhando. O Query Builder basicamente constrói uma consulta até você chamar um método em que ele executará a consulta e atingirá o banco de dados (por exemplo, quando você chama certos métodos como ->all()
->first()
->lists()
outros). Esses métodos também existem no Collection
objeto, que podem ser retornados do Query Builder se houver vários resultados. Se você não tiver certeza de qual classe está realmente trabalhando, tente fazer var_dump(User::all())
e experimentar para ver quais classes ela realmente está retornando (com a ajuda deget_class(...)
) Eu recomendo que você verifique o código-fonte da classe Collection, é bem simples. Em seguida, confira o Query Builder e veja as semelhanças nos nomes das funções e descubra quando ele realmente atinge o banco de dados.
first()
, o resultado será diferente deget()
, que pode ser verificado com o!$result
resultado vazio.null
Model::first()
- ele está realmente atuando no método 'first` do construtor de consultas e NÃO na coleção, portanto, ele escolherá o primeiro do banco de dados - no entantoModel::get()
, retornará uma instância de Illuminate \ Support \ Coleção, então, se você fez$r = Model::get()
,$r->first()
ele selecionará o primeiro item dessa coleção.count($result)
funciona; adicionar esse detalhe seria uma melhoria.foreach
loop e, em seguida, use uma dessas verificações (pensecount($collection->column)
:).Eu acho que você está procurando:
Isso é diferente de
empty($result)
, o que não será verdadeiro porque o resultado será uma coleção vazia. Sua sugestão decount($result)
também é uma boa solução. Não consigo encontrar nenhuma referência nos documentosfonte
Eu concordo com a resposta aprovada acima. Mas geralmente eu uso o
$results->isNotEmpty()
método como indicado abaixo.É mais detalhado do que
if(!results->isEmpty())
porque às vezes esquecemos de adicionar '!' na frente, o que pode resultar em erro indesejado.Observe que esse método existe a partir da versão 5.3 em diante.
fonte
Existem vários métodos fornecidos no Laravel para verificar a contagem de resultados / verificar vazio / não vazio:
fonte
Acho melhor usar
fonte
Eu acho que você tenta algo como
ou também usar
fonte
Você pode fazer
para contar os resultados.
Você também pode usar
para verificar se o resultado está vazio ou não.
fonte
De acordo com a documentação do Laravel , você pode usar desta maneira:
O
isEmpty
método retornarátrue
se a coleção estiver vazia; caso contrário,false
é retornado.fonte
então o Laravel realmente retorna uma coleção quando apenas o usa,
Model::all();
você não deseja uma coleção, deseja uma matriz para poder digitar defini-la.(array)Model::all();
então você pode usar array_filter para retornar os resultadosisso também permitirá que você faça coisas como
count()
.fonte
------ RESOLVIDO ------
Nesse caso, você deseja verificar dois tipos de contagem para dois intervalos
caso 1:
se o resultado contiver apenas um registro ou outra palavra, selecione uma linha do banco de dados usando -> primeiro ()
caso 2:
se o resultado contiver conjunto de várias linhas com outra palavra usando -> get () ou -> all ()
fonte
Você pode usar:
$counter = count($datas);
fonte