2016-05-03 11 views
-1

ユーザーが作成した投稿を読み込む機能は次のとおりです。Laravel ORM select query function load()on 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')); 
} 

提出にレコードがない場合は、このメンバ関数のロードにエラー

コール()はnull

上で返します。

DBに投稿がない場合の対処方法を教えてください。

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')); 
} 

また、あなたのDBの構造に応じて、私はあなたがして、モデルの関係を利用して、コードの多くを切り取ることができますかなり確信している:そのnullは最初のif文を使用している場合

+0

あなたは 'null'の場合を回避する必要があります。すでにこの点に達しているので、' null'値のチェックはそれほど大きなチャレンジではないと思います。 –

答えて

1

だけでチェック

$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(); 
このような何かをやって10

コードは完全には動作しませんが、それを調整できると確信しています。要点は、既に設定した関係を使用することで、コードをもっと短くしても、さらには読みやすくすることができるということです。

+0

ようこそ。 – haakym