我想知道我是否可以从数据透视表中创建动态关系。我正在使用mariadb,我有如下结构表
表user_has_profiles
作为透视模型App\Models\PivotProfile
| 用户标识|配置文件标识|配置文件类型|
| - -|- -|- -|
| 唯一标识符-1| uuid向上|应用程序\模型\用户配置文件|
| 唯一标识符-1| uuid-传输协议|应用程序\模型\教师配置文件|
表user_profiles
作为模型App\Models\UserProfile
| 标识符|性别|生日|
| - -|- -|- -|
| uuid向上|雄的|2022年1月1日|
表teacher_profiles
作为模型App\Models\TeacherProfile
| 标识符|教师编号|乡村|
| - -|- -|- -|
| uuid-传输协议|TC-001注射液|法国Name|
如果使用模型Pivotprofile::get()
进行查询,如何才能得到这样结果
[
0 => [
"user_id" => "uuid-1",
"profile_id" => "uuid-up",
"profile_type" => "App\Models\UserProfile",
"profile" => [
"id" => "uuid-up",
"gender" => "male",
"birthday" => "2022-01-01"
]
],
1 => [
"user_id" => "uuid-1",
"profile_id" => "uuid-tp",
"profile_type" => "App\Models\TeacherProfile",
"profile" => [
"id" => "uuid-tp",
"teacher_number" => "TC-001",
"country" => "France"
]
],
]
因此,PivotProfile
会根据profile_type
自动建立关系。或者,如果用户有多个配置文件表,您可以在结构表中选择更好的选项。谢谢
1条答案
按热度按时间bf1o4zei1#
实现这一点的一个选项是在PivotProfile模型中创建多态关系。
首先,在PivotProfile模型中定义关系:
然后,可以在查询中使用morphTo()方法来检索相关的概要文件模型:
这将根据数据透视表中的“profile_type”字段返回一个包含相关配置文件模型的“profile”属性的PivotProfile对象集合。
然后,您可以循环访问集合并访问每个透视表配置文件的配置文件数据:
请注意,此解决方案假定您已在透视表的profile_type字段中定义了正确的变形类。例如,如果profile_type为“App\Models\UserProfile”,则UserProfile模型应将$morphClass属性设置为“App\Models\UserProfile”。
希望这对你有帮助!如果你有任何进一步的问题,请告诉我。