我正在尝试从表消息中获取废弃的行:
public function trash() {
return $this->onlyTrashed()
->where('user_id', '=', $this->_u)
->orWhere('receiver', '=', $this->_u)
->orderBy('deleted_at', 'desc')->get();
}
我收到此错误:
Method Illuminate\Database\Query\Builder::onlyTrashed does not exist.
我检查了 Builder 和 SoftDeletes 文件中是否有 onlyTrashed 方法,但它不存在,如何从消息表中查找已删除的消息?
我想到的唯一方法是创建一个方法,当delete_at不为空时,不返回消息,而trashed只返回那些不为空的消息。但我仍然想知道为什么这不起作用,因为它在以下网址的文档中:
https://laravel.com/docs/5.6/eloquent#soft-deleting https://laravel.com/docs/5.6/eloquent#soft-deleting
更多信息
是的,它在模型内部,是的,我添加了使用 SoftDeletes:
use Illuminate\Database\Eloquent\SoftDeletes;
- 在上面
use SoftDeletes;
开课后
让我将整个模型粘贴到此处:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Facades\DB;
class Messages extends Model
{
use SoftDeletes;
protected $fillable = [
'user_id', 'subject', 'text', 'receiver'
];
public $_u;
protected $dates = ['deleted_at'];
public function __construct() {
$this->_u = auth()->user()->user_id; //or some id as string
}
public function trash() {
return $this->onlyTrashed()
->where('user_id', '=', $this->_u)
->orWhere('receiver', '=', $this->_u)
->orderBy('deleted_at', 'desc')->get();
}
public static function trashed() {
return self::onlyTrashed();
}
}
控制器有:
public function __construct() {
$this->middleware('auth');
}
public function index($field = 'trash') {
if ($field !== "new") {
$messages = (new Msg)->$field();
$user = auth()->user();
return view('pages.messages', compact('messages', 'user'));
}
return view('pages.messages.new', compact('messages', 'user'));
}
我也尝试过调用静态,并且尝试从tinker并且仍然不断得到:
onlyTrashed() 不存在