###前提・実現したいこと
サムネイル付き投稿ができる掲示板のようなものを作ってみたいと考えています。
PostモデルにThumbnailモデルを1対1のリレーションで結んで、PostモデルからThumbnailモデルを管理するテーブルに保存してあるpathを取得したいのですが、うまくいきいません
###発生している問題・エラーメッセージ
php
1Call to a member function getPath() on null (View: /home/vagrant/practice/resources/views/posts/posts.blade.php) (View: /home/vagrant/practice/resources/views/posts/posts.blade.php)
###該当のソースコード
posts.blade.php
php
1<div class="post-area"> 2 <ul> 3 @if(count($posts) > 0) 4 @foreach($posts as $post) 5 <?php $post_user = $post->user; 6 $post_thumbnail_path = $post->thumbnail()->getResults()->getPath(); 7 ?> 8 <li class="post-list"> 9 <div class="post"> 10 <div class="post-header"> 11 <img src="{{asset("$post_thumbnail_path")}}" class="post-thumbnail"> 12 <h2>{{$post->title}}</h2> 13 </div>
Post.php
php
1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6 7class Post extends Model 8{ 9 // 10 protected $table = 'posts'; 11 protected $fillable = ['title','content','attribution']; 12 13 public function user(){ 14 return $this->belongsTo(User::class); 15 } 16 17 public function thumbnail(){ 18 return $this->hasOne('App\PostThumbnail'); 19 } 20} 21
PostThumbnail.php
php
1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6 7class PostThumbnail extends Model 8{ 9 // 10 protected $table = 'post_thumbnails'; 11 protected $fillable = ['path']; 12 13 public function thumbnail_post(){ 14 return $this->belongsTo('App\Post'); 15 } 16 17 public function getPath(){ 18 return $this->path; 19 } 20} 21
###試したこと
php artisan tinker
で以下のように試しうまくいきましたが、ブラウザで確認しようとすると冒頭のようなエラーが出ます。
php
1[vagrant@localhost practice]$ php artisan tinker 2Psy Shell v0.8.15 (PHP 7.1.12 — cli) by Justin Hileman 3>>> use App\Post 4>>> use App\PostThumbnail 5>>> $post = Post::find(8) 6=> App\Post {#778 7 id: 8, 8 user_id: 1, 9 title: "サムネイル実験", 10 content: "8回目!", 11 created_at: "2017-12-10 11:23:15", 12 updated_at: "2017-12-10 11:23:15", 13 } 14>>> $post->thumbnail()->getResults()->getPath() 15=> "images/1512904995@images.jpg"
tinkerではうまくpathの値が取得できるのはなぜでしょうか?
また、うまくブラウザで表示させるにはどうするべきでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/12 09:58
2017/12/13 00:15