Laravel,建立深厚的关系

pai*_*hin 2 laravel eloquent

我有以下结构:

“建筑物”有许多“街区”,其中有许多“单元”,其中有许多“租户”

我需要获得居住在建筑物中的所有租户的列表。

Laravel 提供了 hasMany 和 hasManyThrough 命令,可以帮助您获取具有直接关系或通过单个中间表相关的模型集合,但是如果您想获取两级、三级或任何深度的相关元素怎么办?

使用 Laravel/Eloquent 实现这一目标的正确方法是什么?

Jon*_*eir 11

这种情况下没有本地关系。

我创建了一个HasManyThrough无限级别的关系:GitHub 上的存储库

安装后,您可以像这样使用它:

class Building extends Model {
    use \Staudenmeir\EloquentHasManyDeep\HasRelationships;

    public function tenants() {
        return $this->hasManyDeep(Tenant::class, [Block::class, Unit::class]);
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 7

我认为你想做的是嵌套预加载。就像访问关系一样:

例如,如果您的帖子有评论并且评论有回复,并且您希望所有帖子都有评论和评论回复:

$posts = Post::with('comment.reply')->get();
Run Code Online (Sandbox Code Playgroud)

链接: https: //laravel.com/docs/5.3/eloquent-relationships#eager-loading