2016-11-07 12 views
1

私はソーシャルネットワーキングサイトタイプのプロジェクトを作成しようとしましたが、ユーザーがログインしたときに投稿を削除しようとしました。他の投稿を好きにしたり嫌いしたりするだけです。 -Laravel:非オブジェクトのプロパティを取得しようとしています

Trying to get property of non-object 

そして、この編集の前には、エラーを示しています。私はそれを削除しようとした しかし、。コードを使用して誰でも投稿を削除できたとき:

public function getDeletePost($post_id){ 

    $post = Post::where('user_id',$post_id)->first(); 

    if (Auth::user() != $post->user) { 
     return redirect()->back(); 
    } 

    if ($post != null) { 
     $post->delete(); 
     return redirect()->route('dashboard')->with(['message'=> 'Successfully deleted!!']); 
    } 

    return redirect()->route('dashboard')->with(['message'=> 'Wrong ID!!']); 
} 

「表示されないID!」毎回、投稿を削除しないでください。ユーザーテーブルの

列:ID、電子メール、パスワード ポストテーブルの列:ID、のcreated_at、updated_atの、ボディは、

そして、ユーザーテーブルのidを持つポストのテーブルリンクのUSER_IDをUSER_ID。

追加のDD(認証::ユーザー()、$ポスト):ここで間違っている何

User {#183 ▼ 
#connection: null 
#table: null 
#primaryKey: "id" 
#keyType: "int" 
#perPage: 15 
+incrementing: true 
+timestamps: true 
#attributes: array:7 [▶] 
#original: array:7 [▶] 
#relations: [] 
#hidden: [] 
#visible: [] 
#appends: [] 
#fillable: [] 
#guarded: array:1 [▶] 
#dates: [] 
#dateFormat: null 
#casts: [] 
#touches: [] 
#observables: [] 
#with: [] 
+exists: true 
+wasRecentlyCreated: false 
} 
null 

?削除ボタンを含むコードの

パート:dashboard.blade.phpから:

<div class="interaction"> 
       <a href="#">Like</a> | 
       <a href="#">Dislike</a> 
       @if(Auth::user() == $post->user) 
       | 
       <a href="#">Edit</a> | 
       <a href="{{route('post.delete',['post_id=>$post->id'])}}">Delete</a> 
       @endif 
      </div> 
+0

は最初 'if'前にこれを入れて、' DD(認証::ユーザー()、$ポスト)であるものを出力たちをご提示ください。 ' –

+0

@Alexey Mezenin - それを確認してください。 –

+0

ありがとうございます。私はasnwerを投稿しました。 –

答えて

1

を編集しました。ただ、最初のif$post != nullを追加し、あなたが期待するとして、それは動作します:

public function getDeletePost($post_id){ 

    $post = Post::where('user_id',$post_id)->first(); 

    if ($post != null && Auth::user() != $post->user) { 
     return redirect()->back(); 
    } 

    if ($post != null) { 
     $post->delete(); 
     return redirect()->route('dashboard')->with(['message'=> 'Successfully deleted!!']); 
    } 

    return redirect()->route('dashboard')->with(['message'=> 'Wrong ID!!']); 
} 
+0

ありがとう、それは今、そのエラーを表示されていません。しかし、それは私の質問で述べたのと同じ問題を引き起こしています。 「間違ったID!」と言っていますが、この問題の原因は何ですか? –

+0

これは、テーブルに 'user_id = $ post_id'を持つ' Post'がないことを意味します。おそらく、 '' user_id '== $ post_id'の代わりに '' id' == $ post_id'を探したいでしょうか? –

+0

私は$ user_idの代わりに$ idを使用しようとしましたが、同じエラーを表示します –

0

私が代わりとしてfirst()を使用してのfirstOrFail()を使用することをお勧めいたします:あなたは、その後firstOrFail()を使用する場合は

$post = Post::where('user_id',$post_id)->firstOrFail(); 

$postオブジェクトがnullではなく、モデルオブジェクトであることが確認されます。

firstOrFail()メソッドは、クエリの最初の結果を取得します。ただし、結果が見つからない場合は、Illuminate \ Database \ Eloquent \ ModelNotFoundExceptionがスローされます。だからあなたは決してifのチェックをする必要はありません。

+0

しかし、if文を使ってチェックしています。だから、私はそれを2回確認する必要がありますか?またはif文を削除するだけです。 –

+0

あなたの最初の 'if'文で、' $ post-> user'を使用しています。これは問題を引き起こしている可能性があります。 –

+0

大丈夫、私はそれをチェックします。 –

0

はあなたがnullからデータを取得しようとしているので、それはエラーが発生し

public function getDeletePost($post_id) 
    { 
     $post = Post::find($post_id); 
     if ($post) { 
      if (auth()->user()->id != $post->user_id) { 
       return redirect()->back(); 
      } 
      $post->delete(); 
      return redirect()->route('dashboard')->with(['message' => 'Successfully deleted!!']); 
     } 
     return redirect()->route('dashboard')->with(['message' => 'Wrong ID!!']); 

    } 
+0

ありがとう。しようとしましたが、同じエラーが表示されます:非オブジェクト –

+0

のプロパティを取得しようとすると 'dd($ post)'を試してみて、その投稿IDを持つ行があるかどうかを確認し、 – shoieb0101

+0

@Learning_to_solve_problems code – shoieb0101

関連する問題