withTrashed 上的 hasManyThrough 关系

Nea*_*bfi 7 laravel eloquent laravel-5

如何withTrashed应用于hasManyThrough关系?

$this->hasManyThrough('App\Message', 'App\Deal')->withTrashed();
Run Code Online (Sandbox Code Playgroud)

返回

调用未定义的方法 Illuminate\Database\Query\Builder::withTrashed()

当我在做:

$messages = Auth::user()->messages()->with('deal')->orderBy('created_at', 'DESC')->get();`
Run Code Online (Sandbox Code Playgroud)

这是我的交易模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Deal extends Model
{

    use SoftDeletes;

    /* ... */

    protected $dates = ['deleted_at'];

    public function user() {
        return $this->belongsTo('App\User');
    }

    public function messages() {
        return $this->hasMany('App\Message'); // I've tried to put withTrashed() here, there is no error but it doesn't include soft deleting items.
    }
}
Run Code Online (Sandbox Code Playgroud)

Sph*_*olt 13

对于所有这么晚才来的人来说,现在 Laravel 有一种本地方法可以做到这一点。

$this->hasManyThrough('App\Message', 'App\Deal')->withTrashedParents();
Run Code Online (Sandbox Code Playgroud)

这没有很好的记录,但可以在Illuminate\Database\Eloquent\Relations\HasManyThrough

  • 这是在 Laravel 7.x 中实现的。它不适用于 Laravel 5 或 6 (4认同)

小智 2

SoftDelete抛出该错误是因为您在没有使用模型中的特征的情况下请求已删除消息的消息Message

我检查了hasManyThrough相关代码后发现没有办法这样做,你应该玩一下。

前任:

通过消息来获取用户的交易

$deals = Auth::user()->deals()->withTrashed()->with('messages')->get();
foreach($deals as $deal) {
     //Do your logic here and you can access messages of deal with $deal->messages
} 
Run Code Online (Sandbox Code Playgroud)