2016-07-26 93 views
0

當在Laravel中搜索什麼應該是一個非常基本和常見的測試時,似乎對如何正確檢查天氣或不存在模型存在很多混淆,並且如果模型存在,請對模型進行一些操作。當通過stackoverflow,laracasts和laravel文檔本身進行搜索時,它不再清晰。如果我例如運行此查詢,檢查模型是否存在

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

有跡象表明,要我檢查計數()不同的堆棧溢出的帖子,用它似乎並不一致,或使用firstOrFail(),它拋出的存在()方法一個例外。我想要做的就是運行一個類似上面的調用,檢查$餐廳是否是一個有效的模型,然後做一些事情,如果是的話。在我的情況下不需要異常,我不想在使用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()將返回空值。你可以使用一個簡單的,如果檢查:

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

謝謝aynber。我的代碼存在一個問題,導致我看不到這一點。 –

0

您還可以使用

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

有時你可能希望拋出一個異常,如果沒有找到一個模型。這在路由或控制器中特別有用。 findOrFail和firstOrFail方法將檢索查詢的第一個結果。然而,如果沒有找到結果,一個照亮\數據庫\雄辯\ 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

沒有幫助我很欣賞答案,但文檔中的這個位置在哪裏?我無法在任何地方找到它。在你的例子中,where()只在你使用first()時才返回null? –