Laravel有一个名为findOrfail()
的内置方法here:
未找到例外
有时,如果找不到模型,您可能希望抛出异常。这在路线或控制器中特别有用。 findOrFail和firstOrFail方法将检索查询的第一个结果。但是,如果未找到任何结果,将抛出Illuminate \ Database \ Eloquent \ ModelNotFoundException:
$ model = App \ Flight :: findOrFail(1);
$ model = App \ Flight :: where(' legs','>',100) - > firstOrFail();
但是如果你想编写自己的代码来处理没有找到的结果怎么办?所以在我的控制器中我需要类似的东西:
public function show($id)
{
$data = JobCardHead::where('JobCardNum', $id)->first();
If no data found then
some code
else
some code
答案 0 :(得分:1)
如果没有找到不抛出异常的方法的模型,Eloquent会返回什么?我猜它是null
或false
。因此,您可以检查first()
调用的返回值:
$data = JobCardHead::where('JobCardNum', $id)->first();
if ($data) {
// found it
} else {
// not found
}
或者,知道firstOrFail()
抛出异常,您可以将调用包装在try / catch块中:
use Illuminate\Database\Eloquent\ModelNotFoundException;
//..
try {
$data = JobCardHead::where('JobCardNum', $id)->first();
} catch (ModelNotFoundException $e) {
// Data not found. Here, you should make sure that the absence of $data won't break anything
}
// Here $data is an instance of the model you wanted
您应该选择的确切方法实际上取决于您的使用情况。
UPD。顺便说一下,如果此处$id
是您的主要关键字,则只需使用find($id)
或findOrFail($id)
,as described here
答案 1 :(得分:0)
当没有返回任何记录时,Laravel会在null
对您的模型的调用中返回first()
。
https://github.com/laravel/framework/blob/5.2/src/Illuminate/Database/Query/Builder.php#L1548
因此,举例来说,你可以做一个更清洁的解决方案:
public function show($id)
{
if ($job = JobCardHead::where('JobCardNum', $id)->first()) {
// Record was found!
return view('job.show', compact('job'));
}
return view('404');
}