代码之家  ›  专栏  ›  技术社区  ›  Chris

拉维尔渴望得到深厚的感情

  •  1
  • Chris  · 技术社区  · 7 年前

    我遇到了一个小麻烦,拉维尔和急于加载的关系。我有三个模型 AssetFolder , Asset DownloadLog

    • 资产管理人 哈斯曼 资产 assets
    • 资产 下载日志 通过 downloads

    $folder = AssetFolder::where('name', 'Example')
        ->with([
            'assets' => function (HasMany $query) {
                $query->orderBy('name', 'asc');
            }
        ])->first();
    

    这部分效果很好。但在本查询中,我还希望 资产 下载日志

    $folder = AssetFolder::where('name', 'Corporate Assets')
        ->with([
            'assets' => function (HasMany $query) {
                $query->orderBy('name', 'asc');
            },
            'assets.downloads'
        ])->first();
    

    我现在希望 资产 包含关系的模型 下载 充满 但不幸的是事实并非如此。这个 下载 关系甚至没有被提及。所以我尝试了解决方案2-

    $folder = AssetFolder::where('name', 'Corporate Assets')
        ->with([
            'assets' => function (HasMany $query) {
                $query
                    ->with('downloads')
                    ->orderBy('name', 'asc');
            }
        ])->first();
    

    这也不起作用-结果和上面一样。我本以为会成功,但没成功。所以为了测试,我进入了 资产管理人 将我的hasmanny关系方法建模并更新为-

    public function assets()
    {
        return $this
            ->hasMany(Asset::class)
            ->with('downloads');
    }
    

    那就行了!这很好,但问题是,90%的时候,我不想把下载日志和正在加载的资产一起拉出来。这就是为什么我认为solution#2可以工作的原因,因为我认为它只是改变了HasMany查询。

    我在这里做错什么了吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   user3325126    7 年前

    只需在AssetFolder模型中创建一个专门用于此目的的不同关系,然后立即加载。

    public function assetsWithDownloads()
    {
        return $this
            ->hasMany(Asset::class)
            ->with('downloads');
    }