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

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

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

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

Q&A

1回答

1348閲覧

Laravel5.4で投稿した記事に投稿したユーザーのユーザー名を表示させたい

yamaoka

総合スコア27

Laravel 5

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

0グッド

0クリップ

投稿2017/07/10 06:02

ユーザーと投稿内容を紐付けて、投稿したものにユーザー名を表示させたいと思っています。

ユーザーは複数のツイートを持っている
ツイートはひとつのuser_idを持っているというリレーションを組みました。しかし下記のコードではオブジェクトのプロパティーがないというエラーが出てしまいました。
dumpで確認したところ、ユーザーもユーザーIDもnullになっていました。

オーソドックスな書き方をしたと思うのですが・・・
ここが原因なのでは?というところが在りましたらご指摘いただきたいです

エラー

http://localhost:8000/ (2/2) ErrorException Trying to get property of non-object (View: C:\xampp\htdocs\Twitter_crone\twitter_clone\twc\resources\views\tweets\index.blade.php)

ビュー

@foreach($tweets as $tweet) <p class="lead">{{ $tweet->created_at->toFormattedDateString() }}</p> <p class="lead">{{ $tweet->user->username }}</p> <a href="/tweets/{{ $tweet->id }}"> <p class="lead">{{ $tweet->body }}</p> </a> @endforeach

tweet migrate

public function up() { Schema::create('tweets', function (Blueprint $table) { $table->increments('id'); $table->text('body'); $table->integer('user_id')->nullable(); $table->timestamps(); }); }

Tweet Model

public function user() { return $this->belongsTo(User::class); }

User Model

public function tweets() { return $this->hasMany(Tweet::class); }

dumpしてみた

Collection {#210 ▼ #items: array:3 [▼ 0 => Tweet {#217 ▼ #guarded: array:2 [▼ 0 => "id" 1 => "created_at" ] #connection: "mysql" #table: null #primaryKey: "id" #keyType: "int" +incrementing: true #with: [] #withCount: [] #perPage: 15 +exists: true +wasRecentlyCreated: false #attributes: array:5 [▼ "id" => 5 "body" => "twasdsfgfjghrty" "user_id" => null "created_at" => "2017-07-07 09:56:47" "updated_at" => "2017-07-07 09:56:47" ] #original: array:5 [▼ "id" => 5 "body" => "twasdsfgfjghrty" "user_id" => null "created_at" => "2017-07-07 09:56:47" "updated_at" => "2017-07-07 09:56:47" ] #casts: [] #dates: [] #dateFormat: null #appends: [] #events: [] #observables: [] #relations: array:1 [▼ "user" => null ] #touches: [] +timestamps: true #hidden: [] #visible: [] #fillable: [] } 1 => Tweet {#218 ▶} 2 => Tweet {#219 ▶} ] }

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

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

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

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

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

guest

回答1

0

dumpデータの、attributesのところのuser_idがnullになっているため、usersのデータにリレーションが出来ていないようです。
tweetsの保存処理を見直して、user_idをusersに存在するデータのidに更新するとうまくいくと思います。
プリントデバッグでdumpするとメソッド情報なども一緒に出て確認が大変な場合は、getAttributesやtoArrayメソッドを利用するとシンプルにデータだけが確認できます。

投稿2017/07/10 13:33

aro10

総合スコア4106

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

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

yamaoka

2017/07/11 05:20 編集

保存処理見直します! あと、チェックのやり方のご指摘ありがとうございます。使ってみます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問