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

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

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

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

Q&A

解決済

2回答

363閲覧

Laravel5.4 Trying to get property of non-object

退会済みユーザー

退会済みユーザー

総合スコア0

Laravel 5

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

0グッド

0クリップ

投稿2017/10/12 07:29

編集2017/10/16 09:49

エラー:Trying to get property of non-object
実際にデータがあるのにnon-objectのエラーの原因は何ですか?

下記2点ともエラー

$user = DB::table('users')->where('user_id',$json['basic_info']['user_id'])->first(); dd($user->user_id); exit;
$user = DB::table('users')->where('user_id',$json['basic_info']['user_id'])->value('user_id');

でも下記でテストするとデータは帰ってきます

$users = DB::table('users')->where('user_id', 25)->first(); dd($users->user_id); exit;

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

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

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

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

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

guest

回答2

0

$json['basic_info']['user_id']は本当にphpに渡っていますか?本当にその値は25ですか?

$usersに値を入れた後にddで出力しているものが$jobsなのですがそれは間違いですか?

追記

本当にこれが送られてくるjsonデータと全く同じコピペ内容ですか?だとするとあなたはずっと「basic_info」からデータを取ろうとしていますが、jsonでは「basic」という名前になっているので、ただの名前間違いです。

投稿2017/10/12 07:36

編集2017/10/16 04:51
masaya_ohashi

総合スコア9206

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

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

退会済みユーザー

退会済みユーザー

2017/10/12 07:38

確かに25は正しいです。なので、phpに渡っている思います。
退会済みユーザー

退会済みユーザー

2017/10/12 07:40

ddで出力しているものが$jobsは打ち間違いです、今修正しました
masaya_ohashi

2017/10/12 07:42

思います、では駄目です。dd($json)で、正しく'basic_info'の中に'user_id'が入っていることを確認してください。
退会済みユーザー

退会済みユーザー

2017/10/16 01:53

ありがとうございます。 確かに'basic_info'には受信出てなかった!
退会済みユーザー

退会済みユーザー

2017/10/16 01:54

$json = json_decode($request->all()['data'], true);
退会済みユーザー

退会済みユーザー

2017/10/16 01:56

dd($json['user']['user_id']); exit;
退会済みユーザー

退会済みユーザー

2017/10/16 01:56

これでNullでした。
masaya_ohashi

2017/10/16 02:08

dd($request->all()) で、想定したデータが送られてきているかどうかよく調べてください。
退会済みユーザー

退会済みユーザー

2017/10/16 02:35

dd($request->all())では何も送られてきてないです。
masaya_ohashi

2017/10/16 02:37

それはそもそも送信側に問題があるのでは…?送信側のコードを提示してください。
退会済みユーザー

退会済みユーザー

2017/10/16 02:42

送信側から送ってくれるJson型のファイルしか持ってないです こんな感じの{"authentication_key":"認証キー","basic":{...},"profile":{...},"info":{...}}
退会済みユーザー

退会済みユーザー

2017/10/16 02:43 編集

ですが自分のローカルからそのJsonファイルをPostで送ってテストしていますが何も来ないです
masaya_ohashi

2017/10/16 02:43

??? $json変数はどこからやってくるものですか?$requestではなく、ファイルから読み込んだものということですか?
退会済みユーザー

退会済みユーザー

2017/10/16 02:47

外部からPOSTで送っています
masaya_ohashi

2017/10/16 02:49

そのpostしているコードがおかしいと思うので、提示してください。
退会済みユーザー

退会済みユーザー

2017/10/16 02:51

なるほど、そのコードは外部にあるので、持ってないです。
退会済みユーザー

退会済みユーザー

2017/10/16 03:02 編集

しかし、以下ですと全データを取得できます。 $json = json_decode($request->all()['data'], true); $json = $request->all(); dd($Json); exit;
masaya_ohashi

2017/10/16 03:00

> そのコードは外部にある ??? いままでどうやってテストしていたのですか?ddで出力結果が見えるということは、あなた自身がブラウザでそのページにアクセスしてるんですよね? > 以下ですと全データを取得できます どこから$userが出てきたのですか?$reqeustから取っているのは$jsonで、$userと$jsonは無関係ですよね?
退会済みユーザー

退会済みユーザー

2017/10/16 03:02

すみません、書き込みミスです。 dd($Json); はJSONです
退会済みユーザー

退会済みユーザー

2017/10/16 03:07

>>??? いままでどうやってテストしていたのですか? もらったJsonファイルをローカルにて下記のようにPOSTしています <html> <body> <form method="post" action="http://local.example.com/api/test_api"> <textarea name="data" rows="40"> {"authentication_key":"jh37aljhdwe09",basic":{"user_id":8,"....}, "profile":{"profile_image":"/home/uploads/aprofile/profile_image/1/profile.png",} </textarea> <button type="submit">submit</button> </form> </body> </html>
masaya_ohashi

2017/10/16 04:04

「dd($request->all())では何も送られてきてないです。」と言っていましたが、これで何も送られてきていないはずはないと思うのですが…
退会済みユーザー

退会済みユーザー

2017/10/16 04:15

dd($json);でデータを取得できているので、 dd($json['basic_info']['user_id']);このようにJsonのデータを取得するのは間違いですか?
masaya_ohashi

2017/10/16 04:17

それと、その貼り付けられているjsonデータ、なんかいろいろおかしく見えるんですが、全文を貼ることはできますか?
masaya_ohashi

2017/10/16 04:20

$jsonに正しくJSONのパース結果が入っているなら、$json['basic_info']['user_id']のように取得することは可能です。ですがあなたは過去に「確かに'basic_info'には受信出てなかった!」と言っています。矛盾ですよね?
masaya_ohashi

2017/10/16 04:26

正直なところ、私はすでにこのやり取りが非常に不毛だと感じています。あなたの出す情報は断片的で、「どの情報」が「どのリクエスト時」に「どういう結果になったか」が私には全く伝わっていません。私が求めているのは「どういうデータを送信しているか」「どういうデータが受信されたか」「送信側はどのようなコードか」「受信側はどのようなコードか」が「全部」分かる状態にすることです。 あなたは受信側のコードの一部しか開示していなく、受信したデータをどうパースしているかが一連の流れとして明示されていません。また、指示したテストの結果も矛盾が多く、実は私の知らないところでコードが修正されていたりしないか不安で仕方がありません。 質問文に「現状のコード(送信、受信)」、「送信したJSONデータ」「受信したリクエストをddで出力した結果」をまとめてもらえないでしょうか。
退会済みユーザー

退会済みユーザー

2017/10/16 04:40

こちらは送ってくるJsonデータです {"auth_key":"xfe45sg345gszdf3","basic":{"user_id":8,"name":"h","email":"example@example.com",}, "profile":{"profile_image":"uploads/profile_image/1/profile.png","birth_day":"1989-01-01", "sex":1,"other":{"other_1":null,"other_2":"xxx",}, "experience_industries":["IT","メーカー"],"overseas_experiences":[{"location":"xxx","staying":"czxc"}], }, "apply":{"xxx_id":"1111","url":"/test_1111",}}
masaya_ohashi

2017/10/16 04:41

質問文に追記してください。ここに貼られると読みにくくてかないません
退会済みユーザー

退会済みユーザー

2017/10/16 04:43

あと、私の方の全スースコードを編集しました。
退会済みユーザー

退会済みユーザー

2017/10/16 04:59

同じです。
masaya_ohashi

2017/10/16 05:03

現状の問題点を回答に追記しました。 それと、同じ課題であれば、「外部からはJSONが直接送られてくる」のに、あなたのテストしているコードは「formのdataをjson_decodeでパースしている」ので、テストでうまく行っても外部からのアクセスでは失敗することが確定しています。テスト方法と実装を修正するべきです。
退会済みユーザー

退会済みユーザー

2017/10/16 09:46

了解しました ありがとうございます
okinaka3

2017/10/17 20:54 編集

あらら、それはダメですね・・・。 form で post すると、JSON データは "application/x-www-form-urlencoded" というデータ形式にブラウザーで変換されてから送信されます。 実際の外部システムから送られてくるデータはその形式ではないということだと思います。
guest

0

ベストアンサー

全体ソースコード書き直して解決しました

投稿2017/10/20 10:34

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

masaya_ohashi

2017/10/23 00:19

これは萎える…私の苦労は何だったのか… 自己解決という形を取るのであれば、「原因がなんだったのか」「どこを直したのか」等のまとめくらい書いてほしいです… teratailとはというページの先頭に、以下の序文があります。 「私達は、質問する方の問題解決を全力でサポートします。 質問・回答によって 生まれたコンテンツを、同じ問題を持った人に最適な形で届けます。」 Teratailは「誰かの問題を解決」するとともに、「同様の症状で悩む人を助ける」のも目的です。このように「書き直して解決しました」と書かれても、「なぜTrying to get property of non-objectが発生したのか」「具体的にどこが原因なのか」「どこを直せばよかったのか」が伝わりません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問