2017-12-30 59 views
0

コントローラの[email protected]メソッドを呼び出す削除ボタンをクリックするとエラーが発生します。未定義のメソッドを照らし\ Databaseへ定義されていないメソッドを呼び出します。laravelの Database Query Builder :: method()エラー5

コール\クエリー\ビルダー::破壊()

スロー新しいBadMethodCallException( "未定義のメソッド {$クラス名}の呼び出し:: {$メソッド}()") ;

public function destroy($id) 
{ 
    User::where('role', 'admin')->destroy($id); 
    return redirect('/home')->with('message', 'Deleted!'); 
} 
+0

試してみてください: 'User :: find($ id) - > delete();' –

+0

@HirenGohel申し訳ありませんwhere( 'role'、 'admin')の部分を含めるのを忘れてしまいました。その部分は実際にエラーを引き起こしています。 – Raj

+1

次のようにしてください: '$ user = User :: where( 'role'、 'admin') - >ここで( 'id'、$ id); $ user-> delete(); ' –

答えて

1
::delete()

のみIlluminate\Database\Eloquent\Modelインスタンスで使用することができる方法を破壊します。 where()を使用すると、Illuminate\Database\Query\Builderが得られます。それがエラーを起こす理由です。 ->destroy()の代わりに->delete()を使用してください。正常に動作します。

+0

' destroy'は静的呼び出しとしてモデル上でしか使用できないのですか?私はそれがtypo 'delete' - >' destroy'だと思います – lagbox

1

キーを使用して既存のモデルのみを破壊することができます。フィルタが必要な場合は、代わりにdeleteを使用します。

laravelドキュメント:

Deleting An Existing Model By Key

User::destroy(1); 

User::destroy(array(1, 2, 3)); 

User::destroy(1, 2, 3); 

Of course, you may also run a delete query on a set of models:

$affectedRows = User::where('votes', '>', 100)->delete(); 
1

まずように、DBからレコードを検索:

$user = User::where('role', 'admin')->where('id', $id); 

そして同じように、それを削除します。

$user->delete(); 

・ホープこれはあなたの問題を修正します!

関連する問題