检查模型是不是在laravel中返回结果的最佳方法[重复]

Posted

技术标签:

【中文标题】检查模型是不是在laravel中返回结果的最佳方法[重复]【英文标题】:Best way to check if model returns results in laravel [duplicate]检查模型是否在laravel中返回结果的最佳方法[重复] 【发布时间】:2019-01-21 13:53:54 【问题描述】:

我是 Laravel 的新手,正在寻找检查模型是否返回任何结果的最佳方法。

如果没有找到结果,下面的示例将返回null。如果您只想要第一个结果,那就太完美了。

$results = FooBar::where(['col' => 'someVal', 'col3' => 'value'])->first();

不管有没有结果,下面的例子都会返回一个对象。

$results = FooBar::where(['col' => 'someVal', 'col3' => 'value'])->get();

因此,我目前每次都必须这样做:

if($results && count($results)) 
     // then do stuff

我有调用各种模型的方法,代码看起来丑陋且效率低下所有这些count() 函数。

仅供参考,由于我们的 php 版本(不在我的控制范围内),我目前正在使用 Laravel 5.1。

【问题讨论】:

@ZakariaAcharki 谢谢,但这不起作用,因为结果不是null,它将是一个对象 ->get() 结合if(count($results) != 0) 应该是你所需要的。 count() 在 Collection 上的工作方式与在数组上的工作方式相同。 @TimLewis 我显然没有任何线索,因为我正在尝试建议的事情但无济于事。我认为这个问题就在我身上。我需要更多经验。还是谢谢。 $results = FooBar::where(['col' => 'someVal', 'col3' => 'value'])->get(); if(count($results) != 0) // something returned 应该没有任何问题,这就是我每天使用的。副本中也建议了类似的内容,因此请尽可能阅读。不用担心,最终它会点击。坚持下去。 findOrFail() 可能会有所帮助。 【参考方案1】:

你的条件不需要太复杂,因为你不能同时做->first()->get(),因此你不需要检查这两个条件,因为取决于你调用的方法,一个总是在脉络中。正如您所注意到的,->first() 可以返回 null - 因此,如果您调用该方法,您可以对照 null 检查结果 - 我建议您使用 $result === null 而不是使用 is_null()

if ($result !== null) 
    ...

对于调用get() 或返回Collection 的一般方法,您将始终得到它。但它可以是空的。事实上,您不需要知道您的集合存储了多少结果。您只需要知道您是否至少获得了一个,因此您只需要在集合对象上调用isEmpty()

if (!$collection->isEmpty()) 
  ...

见docs on Collection

【讨论】:

很遗憾empty() 无法检测到空集合... 我的错。我的意思是isEmpty()。更新了答案 不幸的是我没有和Collection::打交道。我正在使用eloquentlaravel.com/docs/5.6/eloquent Eloquent,使用->get() 返回一个Collection,所以是的,你是:P 是的,你是。阅读您链接到的文档:)

以上是关于检查模型是不是在laravel中返回结果的最佳方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 laravel 5.5 中检查查询没有结果

Laravel 模型函数最佳价格

检查文档是不是存在并根据 CosmosDB 中的结果插入的最佳方法是啥?

如何在 laravel 中检查模型的对象是不是为空?

Laravel Response::json() 带数字检查

Laravel 模型 - 如果数据库表不存在则返回 null