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

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

新規登録して質問してみよう
ただいま回答率
85.49%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

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

Q&A

解決済

1回答

1025閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

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

0グッド

0クリップ

投稿2018/02/15 09:26

編集2018/02/19 05:51

ログインするときに下記のエラーが出てしまいます、しかし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'); } 省略... }

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

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

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

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

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

guest

回答1

0

ベストアンサー

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

php

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

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

追記

php

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

という感じですかね。

投稿2018/02/16 00:10

編集2018/02/19 07:35
motuo

総合スコア3027

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

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

退会済みユーザー

退会済みユーザー

2018/02/16 01:52

はい、これはJobsテーブルにデータないときにエラーが出ています、データがあれば問題ないのですが、しかし、初期はデータないのが正しいので、どうしたらデータがないときに問題なくできるか!ぜひ教えてくださませ!!
退会済みユーザー

退会済みユーザー

2018/02/16 01:59

ちなみに、indexでは、次のようにしていますが $jobs = Job::all();
motuo

2018/02/16 02:15

どうしたらデータがないときに問題なくできるか… if(!$job){ //無い時の処理 } で如何ですか?
退会済みユーザー

退会済みユーザー

2018/02/16 03:12

これはログインするときに起こります! どこで!$jobをすればいいですか?
退会済みユーザー

退会済みユーザー

2018/02/16 03:20

表示するindex.には @if(!empty($job))で対応しています
motuo

2018/02/16 04:04

そちらが作られようとしているシステムの全体像が分からないので、回答しようが無いです… indexというのも提示されていませんし、最終的にどうなれば正解なのかが私にはよくわかりませんでした。 もう一度、全体像とあるべき姿、アウトプットを整理した上で別で質問するか、質問文を編集してみてはどうですか?
退会済みユーザー

退会済みユーザー

2018/02/19 05:27

質問を編集しました。どうぞ宜しくお願いします
退会済みユーザー

退会済みユーザー

2018/02/19 08:47

下記の修正でもエラーは変わりませんでした。 $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(); }
motuo

2018/02/19 09:07

エラーが出る状態で $job = Job::where('user_id', $this->user_id)->first(); の直後に dd($job)を表示すると何が出てきますか? また、本当にエラー箇所は全く同じ $job_ids = (!empty($job_ids)) ? array_unique($job_ids) : array(); という認識で大丈夫ですか?
退会済みユーザー

退会済みユーザー

2018/02/19 09:44

dd($job)を表示するとnullが出ます!
motuo

2018/02/20 00:09

では、ifをif($job!==null)と書き換えてみてはどうですか?nullの場合、$job_ids = array();を通りますか?
退会済みユーザー

退会済みユーザー

2018/02/20 01:52

>>では、ifをif($job!==null)と書き換えてみてはどうですか 上記にしましたら下記の行でエラーが出ました。 $job_ids = explode(',', $job->job_id); エラーメッセージは下記です Trying to get property of non-object in UserBaseController.php (line 37) at HandleExceptions->handleError(8, 'Trying to get property of non-object', '/var/www/html/manage-career.abroaders/app/Http/Controllers/UserBaseController.php', 37, array('request' => object(Request), 'reset_flg' => true, 'status_counts_names' => null, 'job' => null, 'job_ids' => array()))
motuo

2018/02/20 02:16

上記のコメントを元にすると、$jobはnullのはずです。 その場合は、$job_ids = explode(',', $job->job_id);を通らないですよね? $jobに何らかのデータが入っていませんか? $job_ids = explode(',', $job->job_id);の直前でdd($job)とすると、何か値が入っていませんか? また、そこにはjob_idはありますか?
退会済みユーザー

退会済みユーザー

2018/02/20 05:57

$job_ids = explode(',', $job->job_id);の直前でdd($job)とすると、Nullです。 job_idはありません。
motuo

2018/02/20 06:07

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

退会済みユーザー

2018/02/20 08:59

はい、同じでした
motuo

2018/02/21 04:51

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問