質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

1137閲覧

[Laravel5.4]controller内のeloquentのleftjoinの条件でその前でセットした変数が使用できない。

do_slice

総合スコア26

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2017/10/29 07:14

編集2017/10/29 07:27

//タイトル、用語が間違ってたので修正ました。
いつも大変お世話になっています。

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の書き方を変える必要があるのでしょうか。
もしくは他の場所の記述で何か足りないものなどありますでしょうか。

ご教示いただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

太字のところが足りなかったようです。
お騒がせいたしました。

->leftjoin('boards as boards', function ($join) use($user){

投稿2017/10/29 10:50

do_slice

総合スコア26

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問