【问题标题】:Call to undefined method Illuminate\Database\Query\Builder::method() error in laravel 5在 laravel 5 中调用未定义的方法 Illuminate\Database\Query\Builder::method() 错误
【发布时间】:2018-06-10 12:10:52
【问题描述】:

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

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

throw new BadMethodCallException("调用未定义的方法 {$className}::{$method}()");

销毁方法

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

【问题讨论】:

  • 试试:User::find($id)->delete(); 希望这能解决它!
  • @HirenGohel 抱歉,我忘了包含 where('role', 'admin') 部分。该部分实际上导致错误。
  • 试试:$user = User::where('role', 'admin')->where('id', $id); $user->delete();

标签: php forms laravel laravel-5


【解决方案1】:

::delete() 只能用于Illuminate\Database\Eloquent\Model 实例。当您使用where() 时,您会得到Illuminate\Database\Query\Builder。这就是你出错的原因。使用->delete() 代替->destroy() 就可以了!

【讨论】:

  • 你的意思是destroy只能在模型上作为静态调用使用?我认为这是一个错字delete -> destroy
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    首先从数据库中找到记录,比如:

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

    然后删除它,比如:

    $user->delete();
    

    希望这能解决您的问题!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-04
      • 1970-01-01
      • 1970-01-01
      • 2018-10-03
      • 2014-02-25
      • 2017-05-03
      • 2016-10-22
      • 1970-01-01
      相关资源
      最近更新 更多