2016-07-08 3 views
0

Laravel имеет встроенный метод, называемый findOrfail() описано here:Работа с данными, не найденных в Laravel

Не найдено Исключения

Иногда вы можете бросить исключение, если модель не найдена. Это особенно полезно в маршрутах или контроллерах. Методы 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 
+1

может быть интересно? http://stackoverflow.com/questions/27660175/laravel-checking-whether-it-has-data-or-not-from-the-model. то есть он всегда возвращает модель, которую вы можете проверить как пустой или нет. Или начните заполнять и использовать в качестве модели. Это имеет смысл. Мне нравится, хотя у меня есть метод isFromDB() на модели. (Я не использую Laravel - аналогичная идея, хотя). т. е. если возвращаемый объект всегда возвращает один, но может быть пустым. –

ответ

1

Что означает Eloquent возврат в случае, если ни одна модель найдена для методов, которые не бросают исключение? Я предполагаю, что это либо null, либо false. Таким образом, вы можете проверить возвращаемое значение first() вызова:

$data = JobCardHead::where('JobCardNum', $id)->first(); 

if ($data) { 
    // found it 
} else { 
    // not found 
} 

Или, зная, что firstOrFail() бросает исключение, вы можете обернуть вызов в Try/поймать блок:

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

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'); 
} 
Смежные вопросы