2016-05-03 32 views
-1

這是我的函數,用於加載用戶創建的提交。Laravel ORM選擇查詢函數load()null

public function viewSubs() 
{ 
    $user = User::find(Input::get('id')); 
    $submissions = Submission::find($user)->sortByDesc('created_at'); 

    $submissions->load('user')->load('votes')->load('suggestions.votes'); 

    return view('submissions.index' , compact('submissions')); 
} 

這一個錯誤

呼籲空

返回一個成員函數的load()時,有上提交任何記錄。

如何處理數據庫沒有提交?

+0

你需要繞過'null'的情況,你已經到了這一步,所以我認爲檢查'null'值對你來說並不是什麼大事。 –

回答

1

如果null首先使用if語句只是檢查:

public function viewSubs() 
{ 
    $user = User::find(Input::get('id')); 

    if ($submissions = Submission::find($user)->sortByDesc('created_at')) { 
     $submissions->load('user')->load('votes')->load('suggestions.votes'); 
    } 

    return view('submissions.index' , compact('submissions')); 
} 

另外,根據您的數據庫結構,我敢肯定,你可以利用你的模型的關係剪出很多代碼做這樣的事情:

$user = User::find(Input::get('id')) 
    ->with(['submissions' => function($query) { 
     $query->orderBy('created_at', 'asc'); 
    }, 'submissions.votes', 'submissions.suggestions.votes']); 

$user變量然後傳遞給視圖,或:

$submissions = Submission::with('user', 'votes', 'suggestions.votes') 
    ->where('user_id', Input::get('id')) 
    ->sortByDesc('created_at') 
    ->first(); 

不完全確定代碼將完美工作,但我相信你可以調整它。關鍵是通過使用已經設置好的關係,你的代碼可以縮短很多,並且仍然/更具可讀性。

+0

不客氣。 – haakym