6 soft-delete laravel laravel-5.6
我正在尝试从表消息中获取废弃的行:
public function trash() {
return $this->onlyTrashed()
->where('user_id', '=', $this->_u)
->orWhere('receiver', '=', $this->_u)
->orderBy('deleted_at', 'desc')->get();
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Method Illuminate\Database\Query\Builder::onlyTrashed does not exist.
Run Code Online (Sandbox Code Playgroud)
我检查了 Builder 和 SoftDeletes 文件中是否有 onlyTrashed 方法,但它不存在,如何从消息表中查找已删除的消息?
我想到的唯一方法是创建一个方法,当delete_at不为空时,不返回消息,而trashed只返回那些不为空的消息。但我仍然想知道为什么这不起作用,因为它在以下网址的文档中:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
控制器有:
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'));
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过调用 static,并且尝试从Tinker中进行调用,但仍然不断收到:
onlyTrashed() 不存在
您必须调用父构造函数:
public function __construct() {
parent::__construct();
$this->_u = auth()->user()->user_id;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16441 次 |
| 最近记录: |