//タイトル、用語が間違ってたので修正ました。
いつも大変お世話になっています。
eloquentのleftjoinを使ったクエリー内で、leftjoinの条件をセットする記述の中でその前にセットした変数が認識されなくて困っています。
カレンダー用のテーブル、Yearsと
コンテンツを格納しているBoardsから
該当のユーザーが作成したコンテンツで、公開日が未来日付になってないものを抽出して
紐づけたデータを作りたいと考えています。
contorollerは下記の通りになっています。
$yearly_contents
のデータを作成するためのクエリの前でセットしている
$userと$nowが
Undefined variable: user
となってエラーになってしまいます。
PHP
1//UserProfile.controller 2public function calenderYearly(Request $request, $id, $year){ 3 4 $user = User::find($id); //この値がクエリーに認識されない 5 $now = Carbon::now(); //この値がクエリーに認識されない 6 $date = $year.'-01-01'; 7 8 $target_year = new Carbon($date); 9 $min = $target_year->copy()->subYears(20)->startOfDay(); 10 $max = $target_year->copy()->addYears(20)->endOfDay(); 11 12 $yearly_contents = Year::whereBetween("year_count",[$min->year,$max->year]) 13 //->leftJoin(結合条件) 14 ->leftjoin('boards as boards', function ($join){ 15 $join->on('boards.about_year', '=', 'years.year_count') 16 ->where('boards.user_id', '=', $user->id) //これと 17 ->where('status', '!=', 'draft') 18 ->where('published_at','<=', $now) //これをコメントにすると通る 19 ->where('showing_policy', '<', 150) 20 ->where('year_main_contents_flag', '=', 1); 21 }) 22 23 ->select('years.*','boards.*') 24 ->get(); 25 26 return view('user_profile.calender_yearly', [ 27 'user' => $user, 28 'yearly_contents' => $yearly_contents, 29 ]); 30}
通常のクエリーでは問題なく使えているのですが、
$join->on以降で使う場合何か考慮しないとならないのでしょうか?
ちなみに、Modelには下記のように記載してます。
PHP
1//Board.php 2 public function year() 3 { 4 return $this->belongsTo('App\Year'); 5 } // 6 7 8//Year.php 9 public function boards() 10 { 11 return $this->hasMany('App\Board'); 12 }
controllerの書き方を変える必要があるのでしょうか。
もしくは他の場所の記述で何か足りないものなどありますでしょうか。
ご教示いただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。