2017-08-07 9 views
2

私はlaravel 5.2でブログプロジェクトを作成するためにチュートリアルに従っています。私は他のテーブル(ユーザーテーブル)からユーザー名を表示しようとしています。投稿のプロパティはビューに正常に表示されますが、私はuseテーブルからプロパティにアクセスしようとすると、非オブジェクトのプロパティを取得しようとしています。ここでLaravel 5.2非オブジェクトのプロパティを取得しようとしています

が私の見解です:

<div class="blog-post"> 
      <h2 class="blog-post-title"> 
      <a href="/posts/{{$post->id}}"> 
      {{ $post->title }} 
      </a> 
      </h2> 
      <p class="blog-post-meta"> 
      {{ $post->user->name }} 
      {{ $post->created_at->toFormattedDateString() }} 
      </p> 

      {{ $post->body }} 

      </div><!-- /.blog-post --> 

、ここでは私のPostsControllerのです:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Post extends Model 
{ 
    // 
    protected $fillable = ['title','body','user_id']; 

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

    public function comments(){ 
     return $this->hasMany(Comment::class); 
    } 



} 

ユーザモデル::ここ

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use App\Post; 
use App\User; 

use App\Http\Requests; 



class PostsController extends Controller 
{ 
    // 
    public function __construct(){ 
    $this->middleware('auth')->except(['index','show']); 
    } 

    public function index(){ 


     $posts = Post::latest()->get(); 
     return view('posts.index',compact('posts')); 
    } 

    public function show($id){ 

     $post = Post::find($id); 
     return view('posts.show',compact('post')); 
    } 

    public function create(){ 
     return view('posts.create'); 
    } 

    public function store(){ 
    $this->validate(request(), [ 
     'title' => 'required', 
     'body' => 'required' 

     ]); 

    Post::create([ 
     'title' => request('title'), 
     'body' => request('body'), 
     'user_id' => auth()->id() 
     ]); 


    // $post = new Post; 
    // $post->user_id = auth()->id() 
    // $post->title = request('title'); 
    // $post->body = request('body'); 


    // $post->save(); 

    return redirect('/'); 

    } 
} 

はポストモデルである

<?php 

namespace App; 

use Illuminate\Foundation\Auth\User as Authenticatable; 

class User extends Authenticatable 
{ 
    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 
    protected $fillable = [ 
     'name', 'email', 'password', 
    ]; 

    /** 
    * The attributes that should be hidden for arrays. 
    * 
    * @var array 
    */ 
    protected $hidden = [ 
     'password', 'remember_token', 
    ]; 

    public function posts(){ 
     return $this->hasMany(Post::class); 
    } 
} 
+0

'dd($ post-> user)'の結果は何ですか? – Laerte

+0

結果は:ユーザー{#179▼ #fillable:アレイ:3 [▶] #hidden:アレイ:2 [▶] #connection:ヌル #table:ヌル #primaryKey: "ID" #keyType "INT" #perPage:15 +インクリメント:真 +タイムスタンプ:真 #attributes:配列:7 [▶] #original:配列:7 [▶] #relations:[] #visible:[ ] #appends:[] #guarded:配列:1 [▶] #dates:[] #dateFormat:ヌル #casts:[] #touches:[] #observables:[] #with:[] #morphClass:+ ヌルが存在する:真 + wasRecentlyCreated:偽 } – Ahmed

+0

エラーがこの行にある '{{$ポスト> USER->名}}' ?または別の行を指していますか? – Laerte

答えて

1

userのプロパティにpostでアクセスしている間、このエラーが発生しています。つまり、$post->usernullであるか、objectではなく、array(可能性が低い)を意味します。

高い可能性はnullです。あなたはそれをチェックしましたか?私はあなたがビューでユーザーの名前を表示中に{{$post->user->name ?? ''}}(PHP 7でのみサポート)を使用することをお勧めします。つまり、$post->user->nameが設定されていない場合は何も表示されません。

$post->usernullかどうかを確認してください。任意のpostの場合nullなら、なぜ$post->usernullになるのですか?考えられる原因は何ですか? nullにする$post->user

考えられる原因は以下のとおりです。

  1. 関係が正しく構築されていません。関係が定義されているので、postsテーブルにuser_idという列があることを確認してください。
  2. postsテーブルでは、user_idはヌル入力可能です。その特定の投稿については、user_idはnullです。
  3. この投稿のuser_idは、存在しないuserにリンクされています。そして、これは外国の制約を使用して制限することができます。
0

@Ahmed、 あなたのモデル、ビュー、コントローラは正常に見えます。 これはうまくいくはずです。 データベースにその列名が含まれていることを確認してください。

関連する問題