软删除上的Eloquent restore()函数无法恢复

时间:2014-04-29 08:44:30

标签: laravel eloquent

我最近在我的用户模型中添加了软删除功能,删除部分完美无缺,但是当我尝试恢复时,我收到的错误是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,但我不明白为什么。

2 个答案:

答案 0 :(得分:2)

试试这个

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

答案 1 :(得分:1)

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

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

如果找不到任何内容,它将抛出ModelNotFoundException,因此您可以捕获它并执行任何需要的操作,从而避免在null错误时调用方法。