Closed codedge closed 2 years ago
How are you using the package? What relationships are you combining with createMergeView()
? What does the created view look like?
Migration
Schema::createOrReplaceMergeViewWithoutDuplicates(
'all_export_targets',
[
(new Team())->ftpExportTargets(),
(new Team())->dropboxExportTargets(),
(new Team())->s3ExportTargets(),
]
);
Enforcing a morph map in den AppServiceProvider
boot
method.
View is properly created, but with full class namespace.
View structure
SELECT export_target_ftp.id,
export_target_ftp.name,
export_target_ftp.host,
export_target_ftp.port,
export_target_ftp.username,
export_target_ftp.password,
export_target_ftp.root,
export_target_ftp.passive,
export_target_ftp.ssl,
export_target_ftp.created_at,
export_target_ftp.updated_at,
NULL::character varying AS access_token,
NULL::text AS access_key,
NULL::text AS access_secret,
exportables.team_id AS laravel_foreign_key,
'App\Models\ExportTarget\Ftp'::text AS laravel_model,
'access_token,access_key,access_secret'::text AS laravel_placeholders,
''::text AS laravel_with
FROM export_target_ftp
JOIN exportables ON export_target_ftp.id = exportables.exportable_id
WHERE exportables.exportable_type::text = 'ftp'::text
UNION
SELECT export_target_dropbox.id,
export_target_dropbox.name,
NULL::text AS host,
NULL::smallint AS port,
NULL::text AS username,
NULL::text AS password,
NULL::character varying AS root,
NULL::boolean AS passive,
NULL::boolean AS ssl,
export_target_dropbox.created_at,
export_target_dropbox.updated_at,
export_target_dropbox.access_token,
NULL::text AS access_key,
NULL::text AS access_secret,
exportables.team_id AS laravel_foreign_key,
'App\Models\ExportTarget\Dropbox'::text AS laravel_model,
'host,port,username,password,root,passive,ssl,access_key,access_secret'::text AS laravel_placeholders,
''::text AS laravel_with
FROM export_target_dropbox
JOIN exportables ON export_target_dropbox.id = exportables.exportable_id
WHERE exportables.exportable_type::text = 'dropbox'::text
UNION
SELECT export_target_s3.id,
export_target_s3.name,
NULL::text AS host,
NULL::smallint AS port,
NULL::text AS username,
NULL::text AS password,
NULL::character varying AS root,
NULL::boolean AS passive,
NULL::boolean AS ssl,
export_target_s3.created_at,
export_target_s3.updated_at,
NULL::character varying AS access_token,
export_target_s3.access_key,
export_target_s3.access_secret,
exportables.team_id AS laravel_foreign_key,
'App\Models\ExportTarget\S3'::text AS laravel_model,
'host,port,username,password,root,passive,ssl,access_token'::text AS laravel_placeholders,
''::text AS laravel_with
FROM export_target_s3
JOIN exportables ON export_target_s3.id = exportables.exportable_id
WHERE exportables.exportable_type::text = 's3'::text;
Please share the ftpExportTargets
, dropboxExportTargets
and s3ExportTargets
relationships.
public function ftpExportTargets(): MorphToMany
{
return $this->morphedByMany(Ftp::class, 'exportable');
}
public function dropboxExportTargets(): MorphToMany
{
return $this->morphedByMany(Dropbox::class, 'exportable');
}
public function s3ExportTargets(): MorphToMany
{
return $this->morphedByMany(S3::class, 'exportable');
}
public function exportTargets(): MergedRelation
{
return $this->mergedRelation('all_export_targets');
}
Thanks. Yeah, I think it makes sense to use the morph map here. I released a new version (for Laravel 9).
Hey,
I am using this package with enforcing a morph map like this
In the created view I see the column
laravel_model
with the full path/namespace.Shouldn't this be decoupled when using a morph map?