2016-11-07 4 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!" 매번 게시물을 삭제하지 마십시오. 사용자 테이블의

열이 : 아이디, 이메일, 비밀번호 게시물 테이블의 컬럼 : 아이디, 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 문을 사용하여 확인하고 있습니다. 그래서 두 번 확인해야합니까? 아니면 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 코드가 편집 됨 – shoieb0101

관련 문제