我对Laravel有点and,渴望与他们建立关系。我有三个模型AssetFolder
,Asset
和DownloadLog
AssetFolder
通过Asset
的HasMany assets
Asset
通过DownloadLog
的HasMany downloads
我目前正在查询特定的资产文件夹,因此我渴望加载资产。
$folder = AssetFolder::where('name', 'Example')
->with([
'assets' => function (HasMany $query) {
$query->orderBy('name', 'asc');
}
])->first();
这部分效果很好。但是出于查询的目的,我也希望加载每个与Asset
相关的DownloadLog
记录。我尝试了解决方案#1-
$folder = AssetFolder::where('name', 'Corporate Assets')
->with([
'assets' => function (HasMany $query) {
$query->orderBy('name', 'asc');
},
'assets.downloads'
])->first();
我现在希望我的Asset
模型包含一个名为downloads
的关系,该关系充满了DownloadLog
个对象,但不幸的是事实并非如此。甚至没有引用downloads
关系。因此,我尝试了解决方案2-
$folder = AssetFolder::where('name', 'Corporate Assets')
->with([
'assets' => function (HasMany $query) {
$query
->with('downloads')
->orderBy('name', 'asc');
}
])->first();
这也不起作用-与上述结果相同。现在,我本以为可以正常工作,但没有成功。因此,要进行测试,我进入了AssetFolder
模型,并将HasMany关系方法更新为以下内容-
public function assets()
{
return $this
->hasMany(Asset::class)
->with('downloads');
}
那行得通!很好,但是问题是90%的时间,我不想将下载日志和正在加载的资产一起提取。这就是为什么我认为解决方案2可以起作用的原因,因为我认为它只是改变了HasMany查询。
我在这里做错什么了吗?
克里斯。
答案 0 :(得分:0)
只需为此专门在AssetFolder模型中创建一个不同的关系,然后就可以为此进行加载。
public function assetsWithDownloads()
{
return $this
->hasMany(Asset::class)
->with('downloads');
}