Laravel 5.6雄辩的模型不能使用withTrash或onlyTrashed函数

时间:2018-07-19 16:49:09

标签: eloquent laravel-5.6

我将laravel从5.4升级到 5.6.23 并像这样使用Eloquent模型

<?php namespace App\Model;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Category extends Model
{
    use SoftDeletes;
}

然后我在控制器中用垃圾回收功能调用了类别

<?php namespace App\Http\Controllers\Backend;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Requests;
use App\Model\Category;

class CategoryController extends Controller
{

    public function __construct() 
    {
        $this->middleware('auth');         
    }

    public function index(
        Request $request
    ) {  
        dd(Category::onlyTrashed());
    }
}

,并且显示这样的错误。甚至正常的获取数据也将包括softdelete行的所有记录

BadMethodCallException
Method Illuminate\Database\Query\Builder::onlyTrashed does not exist.

5.4可以正常工作,但5.6对我不起作用 这是dd(class_uses_recursive(Category::class));

的结果
array:8 [▼
  "Illuminate\Database\Eloquent\Concerns\HasAttributes" => "Illuminate\Database\Eloquent\Concerns\HasAttributes"
  "Illuminate\Database\Eloquent\Concerns\HasEvents" => "Illuminate\Database\Eloquent\Concerns\HasEvents"
  "Illuminate\Database\Eloquent\Concerns\HasGlobalScopes" => "Illuminate\Database\Eloquent\Concerns\HasGlobalScopes"
  "Illuminate\Database\Eloquent\Concerns\HasRelationships" => "Illuminate\Database\Eloquent\Concerns\HasRelationships"
  "Illuminate\Database\Eloquent\Concerns\HasTimestamps" => "Illuminate\Database\Eloquent\Concerns\HasTimestamps"
  "Illuminate\Database\Eloquent\Concerns\HidesAttributes" => "Illuminate\Database\Eloquent\Concerns\HidesAttributes"
  "Illuminate\Database\Eloquent\Concerns\GuardsAttributes" => "Illuminate\Database\Eloquent\Concerns\GuardsAttributes"
  "Illuminate\Database\Eloquent\SoftDeletes" => "Illuminate\Database\Eloquent\SoftDeletes"
]

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方案。我尝试在父项中添加启动功能

<?php namespace App\Model;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Category extends Model
{
    use SoftDeletes;

    public static function boot()
    {
        parent::boot();
    }
}

然后Category::withTrashed()Category::all()都没有错误,因此过滤器softDelete out