Eloquent morphTo() - > withTrashed()停止工作

时间:2016-06-05 19:38:11

标签: laravel laravel-5 eloquent laravel-5.2

我在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

2 个答案:

答案 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,并且不对其进行任何处理其他人。