在laravel 5中调用未定义的方法Illuminate \ Database \ Query \ Builder :: method()错误

问题描述 投票:0回答:3

当我单击在控制器上调用Controller@delete方法的删除按钮时,我收到错误。

调用未定义的方法Illuminate \ Database \ Query \ Builder :: destroy()

抛出新的BadMethodCallException(“调用未定义的方法{$ className} :: {$ method}()”);

破坏方法

public function destroy($id)
{
     User::where('role', 'admin')->destroy($id);
     return redirect('/home')->with('message', 'Deleted!');
}
php forms laravel laravel-5
3个回答
1
投票

::delete()只能用于Illuminate\Database\Eloquent\Model实例。当你使用where()时,你会得到Illuminate\Database\Query\Builder。这就是你收到错误的原因。使用->delete()而不是->destroy(),它会工作正常!


1
投票

您只能使用密钥销毁现有模型。如果您想要过滤器,请改用delete。

laravel docs:

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();

希望这能解决你的问题!!

© www.soinside.com 2019 - 2024. All rights reserved.