php - Laravel 表单提交关系
问题描述
在我的应用程序中,我有很多表格。表单是它自己的实体,具有自己的属性。当用户填写并提交表单时,会为该表单创建提交。因此,一个表单有许多提交,而一个提交属于一个表单。然而......正如我刚才提到的,提交不是它自己的实体,而是许多子实体的抽象父实体。这是一个图表:
因此,假设用户填写了“联系我们”表格。保存后,将创建一个 ContactUs 模型。
我希望能够查询特定表单的所有提交。IE。Form::where('name', 'Contact Us')->first()->submissions;
此查询应返回 ContactUs 模型的集合。同样,Form::where('name', 'Submit a Problem')->first()->submissions;
应该返回 SubmitProblem 模型的集合。我将如何设置我的模型/关系来查询这个?
目前,我将 form_id 存储在每个提交模型中。这并不理想,因为它是重复的,我的 Submission 模型不应该跟上它的 Form id。
根据我在 laravel 文档上阅读的内容,这看起来像是一对多的多态关系。但是,我不知道如何使用中间表设置这种关系。
我的模型:
class Form extends Model
{
public function submissions()
{
return $this->morphMany('submittable');
}
}
class ContactUs extends Model
{
public function form()
{
return $this->morphTo('submittable');
}
}
class SubmitProblem extends Model
{
public function form()
{
return $this->morphTo('submittable');
}
}
解决方案
表格将具有以下结构/列
//forms table
- id
- name
- description
- submittable_id
- submittable_type
- created_at
- updated_at
class Form extends Model
{
public function submissions()
{
return $this->morphTo('submittable');
}
}
class ContactUs extends Model
{
public function form()
{
return $this->morphOne(Form::class, 'submittable');
}
}
class SubmitProblem extends Model
{
public function form()
{
return $this->morphOne(Form::class, 'submittable');
}
}
查询可以
//Get Contact Us related forms
$contactUsForms = Form::with('submittable')
->where('submittable_type', 'App\Models\ContactUs')
->get();
//Get all SubmitProblem related forms
$submitAProblemForms = Form::with('submittable')
->where('submittable_type', 'App\Models\SubmitProblem')
->get();
推荐阅读
- android-studio - Android Studio (AS) 4.1 Kotlin Portrait to Landscaoe 不起作用
- ios - 如何打印一些数据值?[迅速]
- c# - 在 Visual Studio 2019 中调试 Blazor WebAssembly 代码隐藏文件时无法检查组件属性
- javascript - 如何避免 react-router-dom 中的重复名称?
- javascript - 将悬停转换为单击切换
- python - FastAPI 问题的依赖注入
- javascript - 我可以在 indexeddb 中丢失数据吗?
- sql - 在 BigQuery 中将字节转换为字符串
- objective-c - SDK中每个类的构造函数(用objective-c编写并通过桥接头导入swift)返回nil
- php - 运行测试时 Laravel RefreshDatabase 不起作用