【问题标题】:Eloquent restore() function on soft deletes failing to restore软删除上的雄辩的 restore() 功能无法恢复
【发布时间】:2014-04-29 17:59:42
【问题描述】:

我最近在我的用户模型上添加了软删除,它的删除部分运行良好,但是当我尝试恢复时,我收到一个错误,显示 Call to a member function restore() on a non-object

我的恢复软删除用户的代码如下:

public function putActivateUser()
    {
        $user = Emp::onlyTrashed()->where('id', '=', Input::get('actEmpId'))->first();
        $user->restore();

        return Redirect::route('user_data')
        ->with('message', 'Bruker '.$user->user_name.' aktivert.');
    }

用户激活表格:

{{ Form::open(array('url' => 'bassengweb/ressurect_user', 'method' => 'PUT')) }} 
        {{ Form::select('actEmpId', $deactEmps) }}
        {{ Form::submit('Aktiver Bruker') }}
{{ Form::close() }}

$user 上的 dd 出于某种原因返回 null,但我不明白为什么。

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

    试试这个

    Emp::withTrashed()->where('id','=',Input::get('actEmpId'))->restore();
    

    【讨论】:

      【解决方案2】:

      显然在onlyTrashed 范围内找不到具有表单ID 的用户。 您应该检查查询(例如运行 DB::getQueryLog())和数据库中的数据,但首先将方法更改为 firstOrFail:

      $user = Emp::onlyTrashed()->where('id', '=', Input::get('actEmpId'))->firstOrFail();
      

      如果没有找到,它会抛出ModelNotFoundException,所以你可以抓住它并做任何需要的事情,从而避免在空错误时调用方法。

      【讨论】:

      • 嘿,当我将 ->first() 更改为 ->firstOrFail() 时,它似乎起作用了。奇怪的是,我第一次运行它时,它激活了列表中的每个人,而不仅仅是一个,但它现在似乎正在工作(知道为什么吗?)。非常感谢!
      • 它不应该这样做,除非您使用 get() 而不是第一个并且偶然 Input::get('..') 为空。将first() 更改为firstOrFail() 不是工作或不工作的理由,所以肯定是数据库中的数据或输入有问题。
      • 对,现在重新测试。适用于 first() 和 firstOrFail(),get() 返回错误。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-22
      • 2023-04-10
      • 2020-02-14
      • 2020-12-14
      • 2017-12-15
      • 1970-01-01
      • 2014-10-23
      相关资源
      最近更新 更多