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

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

ただいまの
回答率

89.69%

Laravel5 Trying to get property of non-object エラーです

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 9,235
退会済みユーザー

退会済みユーザー

ログインするときに下記のエラーが出てしまいます、しかしJOBSテーブルにjob_idのデータがあればエラーにはなりません。

原因はjob_idのデータがないからですが初期状態はjob_idデータがないのが正しいので、初期状態でもエラーが出ないようにするにはどうすればいいですか?
教えてくださませ!!

ログインした後のURLが下記のようになっています

example.com/home/before_login_actions

エラーは下記です:

Trying to get property of non-object

in UserBaseController.php (line 28)
at HandleExceptions->handleError(8, 'Trying to get property of non-object', '/var/www/html/test/app/Http/Controllers/UserBaseController.php', 28, array('request' => object(Request), 'reset_flg' => true, 'status_counts_names' => null, 'job' => null))

エラーで表示されているファイルControllers/UserBaseController.phpは下記です。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Apply_users;
use App\User;
use App\Job;
use App\Http\Requests;
use App\Http\Controllers\UserAbstructController;
use Illuminate\Support\Facades\Config;

class UserBaseController extends UserAbstructController
{
    public function __construct()
    {
        parent::__construct();
    }

    /*
    * This function is used to count the number of each status    
    */
    public function totalize_status(Request $request, $reset_flg = FALSE)
    {    
        $status_counts_names = $request->session()->get('status_count_list');
        if ($status_counts_names == NULL || $reset_flg === TRUE) { 
            $job = Job::where('user_id', $this->user_id)->first();
            $job_ids = explode(',', $job->job_id);
            $job_ids = (!empty($job_ids)) ? array_unique($job_ids) : array();
            // get all apply_user by user_id   
            $all_apply_users = Apply_users::where(['user_id' => $this->user_id])->where('invisible_flg', 0)->whereIn('job_id', $job_ids);
            // get all aplly_users's status list
            $all_status_lists = $all_apply_users->pluck('status')->toArray();
            // get all aplly_users's reading_flg list
            $all_reading_flg_lists = $all_apply_users->pluck('reading_flg')->toArray();
            // get all aplly_users's invisible_flg list
            $all_invisible_flg_lists = $all_apply_users->pluck('invisible_flg')->toArray();
            // get all status names from config/user_status.php
            $status_names = config('user_status.user_status_names');
            // initialize count each status
            foreach ($status_names as $key => $status) {
                $status_counts_names[$status . '_count'] = 0;
            }
            if (!empty($all_status_lists)) {
                foreach ($all_status_lists as $status) {
                    $status_counts_names[$status_names[$status] . '_count'] += 1;
                }
            }

            $status_counts_names['read_count'] = 0;
            $status_counts_names['not_read_count'] = 0;
            // count the number of read users and not read users
            if (!empty($all_reading_flg_lists)) {
                foreach ($all_reading_flg_lists as $reading_flg) {
                    if ($reading_flg == 0) {
                        $status_counts_names['not_read_count'] += 1; 
                    } elseif ($reading_flg == 1) {
                        $status_counts_names['read_count'] += 1;        
                    }
                }
            }

            $status_counts_names['invisible_count'] = count(Apply_users::where('user_id',$this->user_id)->where('invisible_flg', 1)->get());

            // set $status_counts_names to session
            $request->session()->put('status_count_list', $status_counts_names);
        }
        return $status_counts_names;
    }

    public function update_all_counts(Request $request)
    {
        $data = $this->totalize_status($request, TRUE);
        return User::where(['id' => $this->user_id])->update($data);        
    }
}

ちなみにline28は下記です:

$job_ids = explode(',', $job->job_id);

ビューに表示するためのindexファイル:
index.Controller.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\User;
use App\Job;
use App\Apply_users;
use App\Location;
use App\Job_categories;
use App\Industry;
use App\Language;
use App\Language_level;
use App\Education;
use App\Http\Controllers\UserBaseController;
use Illuminate\Support\Facades\Config;
use Mail;

class HomeController extends UserBaseController
{
    public function index(Request $request)
    {
        $search = $request->all();
        $user_id = $this->user_id;
        $apply_users_and_job_data = Apply_users::get_apply_user_list($search, $user_id);

        $apply_users = $apply_users_and_job_data['apply_users'];
        $data['job_list'] = $apply_users_and_job_data['job_list'];
        $job_ids = array();
        if (!empty($data['job_list'])) {
            foreach ($data['job_list'] as $job) {
                $job_ids[] = $job->job_id;
            }
        }
        //重複削除
        $job_ids = (!empty($job_ids)) ? array_unique($job_ids) : array();
        $apply_user_emails = array();
        foreach ($apply_users as $key => $apply_user) {
            if (in_array($apply_user->job_id, $job_ids)) {
                $apply_user_emails[] = $apply_user->email;
                $now = intval(date('Ymd'));
                $birth = intval($apply_user->birth_on);
                $apply_users[$key]->age = floor(($now - $birth) / 10000);
            } else {
                unset($apply_users[$key]);
            }
        }
        $duplicated_emails = getDuplicatedArray($apply_user_emails);
        $data['apply_users'] = $apply_users;
        $data['user_status_list'] = config('user_status.user_status');
        $data['duplicated_emails'] = $duplicated_emails;
        $data['search'] = $search;
        $data['locations']  = Location::all();
        $data['industries'] = Industry::all();
        $data['educations'] = Education::all();
        $data['categories'] = Job_categories::all();
        $data['language_levels'] = Language_level::all();
        $data['languages']       = Language::all();
        $data['current_user'] = User::find($this->user_id);
        $data['apply_user_count'] = Apply_users::get_apply_user_count($this->user_id);

        return view('home', $data);
    }

    public function show($id, Request $request)
    {
        $eager_list = [
                        'Job',
                        'Apply_job_offers',
                         省略..
                        ];

        $apply_users = Apply_users::with($eager_list)->findOrfail($id);

        // status名取得
        $user_status = config('user_status.user_status');

        $apply_users->status_name = $user_status[$apply_users->status];
        // 重複チェック
        $same_apply_users = Apply_users::where(['email' => $apply_users->email, 'user_id' => $this->user_id])->get();
        $data['duplicated_flg'] = (count($same_apply_users) > 1) ? TRUE : FALSE;
        // update reading-flg
        $data['current_user'] = User::find($this->user_id);
        if ($apply_users->reading_flg == 0) {
            Apply_users::where(['id' => $apply_users->id])->update(['reading_flg' => 1]);
            // update not read count
            $update_user_param['not_read_count'] = $data['current_user']->not_read_count - 1;
            User::where(['id' => $this->user_id])->update($update_user_param);
            $data['current_user'] = User::find($this->user_id);
        }

        $data['apply_users'] = $apply_users;
        $data['apply_users']['phone_format'] = phone_format($apply_users->phone);
        $data['apply_users']['age_calculation'] = age_calculation($apply_users->birth_on);
        $data['user_status'] = $user_status;
        $data['apply_user_count'] = Apply_users::get_apply_user_count($this->user_id);

        return view('apply_users.details', $data);
    }

    public function before_login_actions(Request $request)
    {
        $this->update_all_counts($request);
        return redirect('/home');
    }
省略...

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

データ内容に問題はありませんか?

 $job = Job::where('user_id', $this->user_id)->first();


で、Jobのデータが取れなかった時にエラーが発生する気がしますが…
確認してみてください。

追記

    $job = Job::where('user_id', $this->user_id)->first();
    if($job){
        $job_ids = explode(',', $job->job_id);
        $job_ids = (!empty($job_ids)) ? array_unique($job_ids) : array();
    }else{
        $job_ids = array();
    }


という感じですかね。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/02/20 15:07

    if($job !== null)の判定後ですよね?ありえないと思いますが…
    if(!empty($job))でも同じですか?

    キャンセル

  • 2018/02/20 17:59

    はい、同じでした

    キャンセル

  • 2018/02/21 13:51

    すいません。とすると私の手には負えそうにないです。

    キャンセル

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

  • ただいまの回答率 89.69%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る