2017-10-29 20 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の男です。改善が必要な場合は、投稿を見直してレビューしました。

任意の方法は...私が正しいだ場合...

あなたは2つの機能を持っている、彼らはそれぞれ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();

doesnot

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

中にエラー

を与えます。私の理解の理由は、$ idは常にユニークであるからです。また、特定のIDに関連する単一のデータ(または単一のモデル)をポストテーブルから返します。 get()メソッドを使用している最初のケースでは、返すものは複数行のデータなので、単一のデータを返しますが、多次元の配列形式です。 dd()ヘルパー関数を使用してチェックすることができます。 2番目のケースでは、first()メソッドを使用しています。その特定の$ idに関連するデータの1行を常に返します。そのため、forceDelete()メソッドが存在します。 get()を使用して取得しようとしている複数のデータ行モデルではありません.get()は常に複数のデータを返そうとしますが、複数のデータは配列上にしか保持できません。結果は1つだけです)。

これが役に立ちます。

関連する問題