2016-11-30 20 views
0

私ははLaravelで非オブジェクトのプロパティを取得しようとすると5

ErrorException取得しています:私はすべてを表示しようとしている

非オブジェクトのプロパティを取得しようとするとをこの関数を使用してリンクされている関係。関係は - >

- カードは多くのメモを持つことができます、ノートは1枚のカードしか持っていません。 - 各ノートには1人のユーザーのみが含まれ、1人のユーザーには1つのカードのみが含まれます。私のコードは次のとおりです。

モデル

  1. class Note extends Model 
    { 
    protected $fillable = ['body']; 
    
        public function cards() 
        { 
         return $this->belongsTo(Card::class); 
        } 
    
        public function users() 
        { 
         return $this->belongsTo(User::class,'id'); 
        } 
    
    } 
    
  2. ユーザー

    class User extends Authenticatable 
    { 
        use Notifiable; 
    
        public function note() 
        { 
         return $this->belongsTo(Note::class); 
        } 
    
        protected $fillable = [ 
         'name', 'email', 'password', 
        ]; 
    
        protected $hidden = [ 
         'password', 'remember_token', 
        ]; 
    } 
    
  3. カード

    class Card extends Model 
    { 
        public function notes() 
        { 
         return $this->hasMany(Note::class);//relationship 
        } 
    
        public function addNote(Note $note) 
        { 
         return $this->notes()->save($note); 
        } 
    } 
    

コントローラ

  1. CardsController

    class cardsController extends Controller 
    { 
        public function index() 
        { 
         $cards = Card::all(); 
         return view('cards.index',compact('cards')); 
        } 
    
    public function show(Card $card) 
    { 
        $card->load('notes.user'); **The Error is here.** 
        $return $card; 
        return view('cards.show',compact('card')); 
    } 
    

    }

  2. NotesControllerの

    class notesController extends Controller 
    { 
    
        public function store(Request $request, Card $card) 
        { 
         $card->addNote(
           new Note($request->all()) 
          ); 
    
         return back(); 
        } 
    
        public function edit(Note $note) 
        { 
         return view('notes.edit',compact('note')); 
        } 
    
        public function update(Request $request, Note $note) 
        { 
         $note -> update($request -> all()); 
    
         return back(); 
        } 
    } 
    

DB

1. notes table

$カード状>負荷( 'notes.user'); - 私はちょうどcardControllers機能に(ノート)を入れると、カードとノートテーブルからリンクしているすべてのデータが表示されます。 - しかし、私は(notes.user)を追加しようとすると、それは非プロパティオブジェクトを取得しようとしていると言いました。何か不足していますか?

+0

「notes.users」を試してください。 – t9toqwerty

+0

[参考 - PHPでこのエラーが意味することは何ですか?](http://stackoverflow.com/questions/12769982/reference-what-this-error-mean-in-php) – Ohgodwhy

+0

また、取得されたコレクションが空であるかどうかを最初に確認するにはhttps://laravel.com/api/5.3/Illuminate/Database/Eloquent/Collection.html#method_isEmpty – t9toqwerty

答えて

0

これは実際には存在しないクラスプロパティにアクセスしようとしているときに、非常に一般的で説明的なエラーです。

これを避けるには、プロパティにアクセスする前にisset()を使用してください。

+0

データはすでに存在しますが、テーブル間の接続は –

0

は、それが動作します $notes=DB::table('notes')->get(); return view('cards.show')->with('notes',$notes); リアクションコントローラで、次のようにしてみてください。ビューで

uは @foreach($notes as $row) {{$row->user_id}} @endforeach

`

+0

ですが、ユーザーテーブルではなくノートテーブルとカードテーブルのみが接続されます。 –

+0

左に参加すると、あなたのデータに基づいてユーザテーブルに接続することができます –

0
$card->load('notes.user'); 

表示使用したい場合、これはあなたがCardモデルから2つの関係をロードしようとしていること - ノートとユーザー。あなたのモデルを見てuserあなたのCardモデルからの関係はありません。また、ノートモデルでは、これを `users 'と言いました。アプリ全体で特異語を使用する方が良いでしょう。

関係がロードされていないので、$model->relationまたは$model->relation->propertyにアクセスしている間は、property of non-objectを取得するのは明らかです。

+0

あなたはそれを解決するための任意のアイデアはありますか? –

関連する問題