【问题标题】:Using withTrashed with relationships in Eloquent在 Eloquent 中使用 withTrashed 处理关系
【发布时间】:2014-11-10 03:48:55
【问题描述】:

有没有办法在 Eloquent 中使用 withTrashed 与关系。

我需要的是这个。我有表和模型Mark 和另一个表UserUser 有很多 MarkMark 属于 User。所以我在 Eloquent 模型中定义了这一点。

现在我需要获得一个软删除的Mark 实例。如果User 没有被软删除,这不是问题,但如果MarkUser 都被软删除,我会收到错误Trying to get property of non-object,因为

$mark->user

不会返回实际用户,因为它被软删除了。

有没有办法让我做类似的事情

$mark->withTrashed()->user

即使被删除也能得到这个相关用户?

【问题讨论】:

    标签: php laravel eloquent


    【解决方案1】:

    根据你的需要,你可以定义关系:

    public function marks()
    {
      return $this->hasMany('Mark')->withTrashed();
    }
    
    // then just
    $user->marks;
    

    或即时使用它:

    $user->marks()->withTrashed()->get();
    
    // or when lazy/eager loading
    $user = User::with(['marks' => function ($q) {
       $q->withTrashed();
    }])->find($userId);
    

    那么你的情况会变成:

    $mark->user() // get relation object first
       ->withTrashed() // apply withTrashed on the relation query
       ->first();  // fetch the user
    
    // alternatively you use getResults relation method
    $mark->user()
       ->withTrashed()
       ->getResults();  // returns single model for belongsTo
    
    $user->marks()->withTrashed()
       ->getResults(); // returns collection for hasMany
    

    【讨论】:

    • 非常感谢
    • 这是一个很好的答案!
    • 我正在使用protected $with 属性。这种方法如何工作?
    • @JunaidQadirShekhanzai 不要使用$with
    • 我们必须同时使用withTrashedbelongsTo 吗?
    【解决方案2】:

    你可以这样做:

    $mark->withTrashed()->first()->user->withTrashed()->first()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-04
      • 2015-04-12
      • 2017-11-12
      • 1970-01-01
      • 1970-01-01
      • 2019-10-25
      • 2013-09-28
      • 2022-01-15
      相关资源
      最近更新 更多