2017-10-29 1 views
-1

다음 동작을 설명해 주시겠습니까?오류 : forceDelete 메서드가 없습니다.

public function kill($id) 
    { 
     $post = Post::withTrashed()->where('id',$id)->get(); 
     $post->forceDelete(); 
     return redirect()->back()->with('success','Post Deleted Succesfully'); 

    } 

코드이 오류가 발생합니다 :

forceDelete method doesnt exist 

그러나 다음 코드는하지 않습니다.

public function kill($id) 
    { 
     $post = Post::withTrashed()->where('id',$id)->first(); 
     $post->forceDelete(); 
     return redirect()->back()->with('success','Post Deleted Succesfully'); 
    } 

누군가 설명 할 수 있습니까?

+2

오류가 발생해서 반갑습니다. –

답변

0

내 Laravel 지식은 녹슬었고 나는 Rails 사람입니다. 개선이 필요하다면 검토를 위해 게시물에 방금 도착했습니다.

어떤 방법 ... 난

당신은이 개 기능을 가지고 그들 각각 F1 및 F2하자 ... 올바른 생각합니다.

F1에서는 특정 ID가있는 게시물을 검색합니다. 당신이 얻는 것은 컬렉션 프록시이고, Post이 아닙니다. 따라서 forceDelete()에 응답하지 않습니다.

F2에서 컬렉션의 첫 번째 개체를 요청하면 forceDelete()에 응답하는 Post 개체가 나타납니다.

는 사실은 매우 간단하다 당신이

Post::withTrashed()->where('id',$id)->delete(); 
0

처럼 어떤 일에 대신 delete() 기능을 사용할 수 있습니다 컬렉션을 삭제합니다. 당신이 게시물에 나타난 바와 같이,

$post = Post::withTrashed()->where('id',$id)->get(); $post->forceDelete();

오류를

동안

$post = Post::withTrashed()->where('id',$id)->first(); $post->forceDelete();

doesnot을 제공합니다. 이유는 내 이해에있어서, $ id는 항상 유일한 것이다. 그리고 post 테이블에서 특정 id와 관련된 단일 데이터 (또는 단일 모델)를 리턴합니다. get() 메서드를 사용하는 첫 번째 경우에서 반환하려고하는 것은 다중 행 데이터이므로 단일 데이터를 반환하지만 다차원 배열 형식으로 반환합니다. dd() 도우미 함수를 사용하여 검사 할 수 있습니다. 두 번째 경우에는 first() 메서드를 사용하고 있는데, 항상 특정 $ id와 관련된 데이터의 단일 행을 반환하므로 해당 사례에 대해 forceDelete() 메서드가 존재합니다. 다른면에서는 forceDelete가 단일 행만 존재한다고 말할 수 있습니다 get()을 사용하여 검색하려는 여러 데이터 행 모델이 아니라 get()은 항상 여러 데이터를 반환하려고 시도하며 여러 데이터는 배열에서만 유지 될 수 있으므로 결과적으로 배열을 제공합니다. 결과는 하나뿐입니다.)

희망이 있습니다.

관련 문제