将hasManyThrough应用于更深层次的关系

clb*_*clb 5 php relationship laravel eloquent

Laravel文档似乎表明该hasManyThrough声明只能用于两个级别的“深层”关系。那更复杂的关系呢?例如,a User有很多Subject,每个都有许多Deck,每个都有许多Card。使用声明简单地获取所有Deck属于的东西,但是所有属于的东西呢?UserhasManyThroughCardUser

Ohg*_*why 2

正如评论中所述,hasManyThrough不支持这种级别的特异性。您可以做的事情之一是返回一个相反方向的查询构建器实例:

//App\User;

public function cards()
{
    Card::whereHas('decks', function($q){
         return $q->whereHas('subjects', function($q){
            return $q->where('user_id', $this->id);
        });
    });
}
Run Code Online (Sandbox Code Playgroud)

我们从 出发Cards -> Decks -> Subjects。应该subjects有一个user_id我们可以锁定的列。

当从用户模型调用时,将如下完成:

$user->cards()->get();
Run Code Online (Sandbox Code Playgroud)