2017-03-16 20 views
0

各ミッションのミッションリストと現在のユーザーの進行状況を返す必要があります。問題は、それは私が得ることを意味する、指定されたユーザではないということですLaravel:アクセス関係テーブル

public function userProgress() { 
     return $this->hasOne(UserDailyMission::class,'mission_id'); 
    } 

:私のDailyMissionモデル(daily_missionsテーブル)に次の関係を使用して

return DailyMission::with('userProgress')->get(); 

:このため、私は、次の雄弁な表現を作成しました私のデータベースのランダムなユーザーの最初の進捗状況。

私はこれに式を変更しようとした:

return DailyMission::with('userProgress') 
     ->where('user_daily_missions.user_id',$user->id) 
     ->get(); 

私は次のエラーを取得する:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'user_daily_missions.user_id' in 'where clause 

ユーザの進捗が、以下の構造用いuser_daily_missionsテーブルに格納されている:

id | user_id | mission_id | current_progress 

現在のユーザーの進捗状況を出力する方法ランダムなユーザーの代わりに?構造に何か問題はありますか?

$mission = DailyMission::with('userProgress')->where('id', 'theuserid')->first(); 

    return $mission; 
+1

と同様に、余分な条件でclosureを渡すことができます$ user-> id) ' –

+0

あなたの関数に$ userがありますか? – Onix

+0

@NarendrasinghSisodiaありがとう!驚くばかり! – TheUnreal

答えて

0

Eloquent内の特定の条件でデータを取得する場合。 Laravelはclosure/callback機能を使用する機能を提供しました。この機能はrelationshipにバインドされ、Modelに定義されています。だからここの上に、あなたは、単に($ユーザー){$ q-で>どこ( 'USER_IDを使用します([ 'userProgress'=>関数($ qを)と `使用してみてください

return DailyMission::with([ 
    'userProgress' => function($q) use ($user){ 
     $q->where('user_id',$user->id); 
}])->get(); 
0

は、私はあなたのユーザーIDを取得する方法を知っているが、これは動作するはずいけない、

これを試してみてください。

return DailyMission::whereHas('userProgress', function($q) use ($user) { 
    $q->where('user_id', $user->id); 
})->get(); 
0

@TheUnrealあなたは、コードの下に使用してみてください可能性: