【发布时间】:2015-03-23 05:45:45
【问题描述】:
我在我的一个模型中将数据库查询设置为范围查询,在某些情况下可能不会返回任何结果,这样做完全没问题:
public function scopeLastFromLaunchSite($query, $site) {
return $query->whereComplete()->whereHas('launchSite', function($q) use($site) {
$q->where('name',$site);
})->orderBy('launch_order_id','DESC')->first();
}
这个函数的调用方式很简单:
Mission::LastFromLaunchSite('someSite');
如果结果中至少有一行,则此查询非常好,但是一旦没有,它就会返回一个非常冗长的 Builder 对象,其中充满了递归,这实际上使我的浏览器。
我的问题是……
如何检测到这一点并简单地返回 false 或 "No results were found." 之类的内容?
我尝试过的...
我尝试使用firstOrFail() 方法代替first(),但这只是返回一个ModelNotFoundException,这给了我两个解决方案:
用
App:error在global.php中处理它。这是不可取的,因为没有返回结果不是错误。只是众多可能结果中的一种。-
在每个方法中捕获异常,这会导致代码重复。我实际上也无法让它工作。我尝试
usingModelNotFoundException类并抓住它,但它永远不会被抓住:use Illuminate\Database\Eloquent\ModelNotFoundException; // ... try { //my query } catch (Illuminate\Database\Eloquent\ModelNotFoundException $e) { return false; } // otherwise, return as normal
当对我的模型的查询未返回任何结果时,我如何才能简单地返回 false 或一些虚假值,而不是简单地打印出这个冗长的错误?
【问题讨论】:
-
你如何调用这个函数?
-
已添加到问题中。
标签: php mysql exception laravel eloquent