我在Laravel 面临着一个关于口才关系的复杂问题.如果你能提供任何帮助,我将不胜感激.
以下是我的表格 struct :
表:
-
albums
:id
,name
-
photos
:id
,name
-
layouts
:id
,name
-
album_photo
:album_id
,photo_id
-
album_photo_layout
:album_id
、photo_id
、layout_id
、visibility
关系:
- 相册可以具有多张照片(具有数据透视表
album_photo
的albums
和photos
之间的多对多关系). - 一张照片可以属于多个相册.
- 每个相册中的每张照片可以具有具有唯一可见性设置的多个布局(具有数据透视表
album_photo_layout
的albums
、photos
和layouts
之间的三向多对多关系).
我正在努力实现的是获得所有相册,每个相册中的所有照片,以及每张照片的所有可能布局.如果某个布局没有链接到特定相册的照片,我希望添加一个默认的可见度值.
以下是我目前的做法:
$album->load([
'photos.layouts' => fn($query) => $query->where('album_id', $album->id)
]);
但这不包括没有与特定相册的照片链接的布局.这些缺失的布局应该包含在默认的visibility
值中.
我已经try 在参考资料中使用whenLoaded()
来解决这个问题,但没有成功.如果缺少布局,它将返回null
,并且不符合我的要求.
理想情况下,我希望解决方案遵循Eloquent 的ORM原则,而不是求助于原始的SQL查询.