2016-07-26 8 views
0

При поиске того, что должно быть очень простым и распространенным тестом в Laravel, кажется, что существует большая путаница в том, как правильно проверять погоду или нет, существует модель, а затем что-то делать с моделью, если это так. При поиске через stackoverflow, laracasts и самой документации laravel, это не становится более ясным. Если я, например, запустить этот запрос,Проверьте, существует ли модель

$restaurant = Restaurant::find($input["restaurant_id"]); 

Существуют различные переполнения стека сообщений, которые имели бы мне проверить счетчик(), используйте метод существует(), который, кажется, не соответствует, или использовать firstOrFail(), которая бросает исключение. Все, что я хочу сделать, это запустить вызов, подобный приведенному выше, проверить, является ли $ restaurant допустимой моделью, а затем сделать что-то, если это так. В моем случае нет необходимости в исключении, и я не хочу, чтобы вам приходилось снова запускать запрос после использования чего-то вроде count() или exists(). В документации нет полезной информации об этом, которая позволяет возвращать 4 разных типа переменных без упоминания о том, какой случай будет запускать возврат. У кого-нибудь есть хорошая ручка на эту тему?

Laravel checking if record exists

Eloquent ->first() if ->exists()

https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Builder.html#method_find

ответ

4

Вам не нужно запускать какие-либо дополнительные вопросы. Если запись не существует, find() вернет значение null. Вы можете просто использовать простой, если проверить:

if($restaurant = Restaurant::find($input["restaurant_id"]) { 
    // Do stuff to $restaurant here 
} 
+0

Спасибо aynber. С моим кодом возникла проблема, которая заставила меня не видеть этого. –

0

Вы также можете использовать

$restaurant = Restaurant::findOrFail($input["restaurant_id"]); 

Иногда вы можете бросить исключение, если модель не найдена. Это особенно полезно в маршрутах или контроллерах. Методы findOrFail и firstOrFail будут извлекать первый результат запроса. Однако, если результат не найден, Осветите \ Database \ красноречивый \ ModelNotFoundException будет выброшено:

От: https://laravel.com/docs/5.1/eloquent

+0

OP заявляет в своем вопросе «В моем случае нет необходимости в исключении», этот ответ не будет полезен OP – milo526

0

Его очень ясно Laravel документы о вашем вопросе, найти(), первый() , get(), все возвращают null, если модель не существует,

$model = Restaurant::find(111); // or 
    $model = Restaurant::where('id',111)->first(); 
    if(!$model){ //if model not exist, it means the model variable is null 
    } 
+0

. Я ценю ответ, но где это в документах? Я не могу найти его нигде. Также в вашем примере, где() возвращает только null, если вы используете first()? –