Was*_*sim 5 laravel eloquent laravel-5
我在模型中设置了多态关系OrderItem,其中saleable 可以有几个不同的模型。
我像任何其他关系一样设置它:
public function saleable()
{
return $this->morphTo()->withTrashed();
}
Run Code Online (Sandbox Code Playgroud)
这曾经工作得很好,现在突然不起作用并抛出错误:
Call to undefined method Illuminate\Database\Query\Builder::withTrashed()
Run Code Online (Sandbox Code Playgroud)
我不明白为什么它会停止工作,可能是由于作曲家更新可能更新了 Laravel。我使用的是 v5.2.35。知道为什么它会停止工作以及我还有什么其他解决方案吗?
更新
适用于 v5.2.33 及更早版本。可能是一个bug,我已经在github上打开了一个问题
小智 8
我仔细研究了代码并找到了解决方案!该解决方案针对我的问题,其中某些模型可以软删除,而另一些则不能。
use Illuminate\Database\Eloquent\SoftDeletingScope;
//...
public function mySometimesSoftDeletableRelation(){
return $this->morphTo()->withoutGlobalScope(SoftDeletingScope::class);
}
Run Code Online (Sandbox Code Playgroud)
其核心是withTrashed使用unset,它不关心是否取消设置未设置的内容,因此这会删除那些拥有它的模型上的 SoftDeletingScope,并且对其他模型不执行任何操作。
我唯一能想象的是您删除了该对象的 SoftDelete 特征,因此它不再加载,或者您添加了boot不从父级继承的方法(因此它不会从该特征加载正确的方法)
编辑
这似乎是 v5.2.34 中引入的错误。它似乎已在此 PR 中修复https://github.com/laravel/framework/pull/13828
编辑
目前应该修复它。v5.2.36 已发布。
| 归档时间: |
|
| 查看次数: |
4398 次 |
| 最近记录: |