我在OrderItem
模型中设置了多态关系,其中saleable
可以是几个不同的模型。
我像其他任何关系一样设置它:
public function saleable()
{
return $this->morphTo()->withTrashed();
}
这曾经工作得很好,现在突然间它不起作用,它会引发错误:
Call to undefined method Illuminate\Database\Query\Builder::withTrashed()
我不明白为什么它会停止工作,可能是由于作曲家更新可能已经更新了Laravel。我在v5.2.35上。知道为什么它会停止工作以及我有什么其他解决方案吗?
更新
适用于v5.2.33及更早版本。可能是一个错误,我已经opened an issue on github
答案 0 :(得分:2)
我唯一可以想象的是你删除了对象的SoftDelete特征,因此它不再被加载,或者你添加了boot
方法,它不会从父级继承(所以它不会加载来自这个特性的正确方法)
修改强>
这似乎是v5.2.34中引入的错误。这似乎是在这个PR https://github.com/laravel/framework/pull/13828
中修复的修改强>
此刻应该修复。 v5.2.36已经发布。
答案 1 :(得分:0)
我仔细阅读了代码,找到了解决方案!此解决方案是针对我的问题的,其中某些模型可以被软删除,而其他模型则不能。
for-each
use Illuminate\Database\Eloquent\SoftDeletingScope;
//...
public function mySometimesSoftDeletableRelation(){
return $this->morphTo()->withoutGlobalScope(SoftDeletingScope::class);
}
的核心是withTrashed
,它不在乎是否设置了未设置的内容,因此将删除那些具有此功能的模型上的SoftDeletingScope,并且不对其进行任何处理其他人。