无法访问 HasManyThrough 关系中的中间 table

Cannot access Intermediate table in HasManyThrough relationship

我的数据库模式看起来像 this.

现在,在 artisan tinker 模式下,当我尝试从用户模型查询详细信息 table 时,它显示了详细信息的记录 table 但我无法访问某些案例模型原因,在 tinker 中它总是 returns NULL。

这是我的用户模型

public function details()
{
    return $this->hasManyThrough('App\Models\Detail', 'App\Models\Cases', 'user_id', 'case_id', 'id', 'id');
}

我做错了什么?

hasManyThrough的思路是跳过中间table。如果您需要查看案例和细节,也许您应该为其定义其他关系。

// User model
public function cases()
{
    return $this->hasMany(Cases::class, 'user_id');
}
// Cases model
public function details()
{
    return $this->hasMany(Detail::class, 'user_id');
}
$users = User::with('cases.details')->get();

foreach ($users as $user) {
    // an user
    foreach ($user->cases as case) {
        // a case
        foreach ($case->details as $detail) {
            // the details of a case
        }
    } 
}

如果为了方便起见,您想直接从用户模型访问详细信息,那么您可以将关系定义为 -(可能看起来有点重复,但如果它容易实现则值得)


class User extends Model
{
    public function cases()
    {
        return $this->hasMany(Case::class);
    }

    public function details()
    {
        return $this->hasManyThrough(Detail::class, Case::class);
    }
}


class Case extends Model
{
    public function details()
    {
        return $this->hasMany(Detail::class);
    }

    public function user()
    {
        return $this->belongsTo(User::class);
    }
}

class Detail extends Model
{
    public function case()
    {
        return $this->belongsTo(Case::class);
    }
}

现在可以通过用户记录直接访问案例和详细信息

$user->cases;

$user->details;