检查模型是不是在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::
打交道。我正在使用eloquent
laravel.com/docs/5.6/eloquent
Eloquent,使用->get()
返回一个Collection
,所以是的,你是:P
是的,你是。阅读您链接到的文档:)以上是关于检查模型是不是在laravel中返回结果的最佳方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章
检查文档是不是存在并根据 CosmosDB 中的结果插入的最佳方法是啥?