【问题标题】:Laravel: Allow soft deleted models in a hasManyThrough relationshipLaravel:允许在 hasManyThrough 关系中软删除模型
【发布时间】:2018-04-15 09:23:39
【问题描述】:

我有很多这样的关系:

class Venue {
    public function orders()
    {
        return $this->hasManyThrough(Order::class, Offer::class);
    }
}

不过Offer 模型可以软删除:https://laravel.com/docs/5.5/eloquent#soft-deleting

这意味着该函数不会返回任何具有软删除报价的订单。

我如何允许该函数返回包含软删除报价的订单。

请注意,我使用的是 Laravel 5.1(尽管新版本的解决方案值得赞赏)。

【问题讨论】:

    标签: laravel laravel-5 laravel-5.1


    【解决方案1】:

    https://laravel.com/docs/5.1/eloquent#querying-soft-deleted-models

    您可以对关系使用->withTrashed() 方法。

    【讨论】:

    • 但这是否包括已丢弃的报价或订单
    • 我现在没有可用的 Laravel,但我认为你可以通过在 hasManyThrough() 方法后面添加 ->withTrashed() 方法来让它工作。如果这不起作用,我建议您在 Order 类中与 Offer 的关系后面添加 withTrashed() 方法。其中之一应该可以解决您的问题。
    • $this->withTrashed()->hasManyThrough(Order::class, Offer::class) 给出Call to undefined method Illuminate\Database\Query\Builder::hasManyThrough() 错误
    • 你应该把它转过来,像这样:$this->hasManyThrough(Order::class, Offer::class)->withTrashed()
    • 这给了我:Call to undefined method Illuminate\Database\Query\Builder::withTrashed()
    【解决方案2】:

    你可以这样做:

    $venue->orders()->withTrashedParents()->withTrashed();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-09
      • 2017-03-30
      • 1970-01-01
      • 2018-10-18
      • 2023-03-09
      • 2018-07-24
      • 1970-01-01
      • 2020-10-14
      相关资源
      最近更新 更多