【发布时间】:2016-01-07 22:28:31
【问题描述】:
我在申请过程中遇到了一些困难,并问了很多问题,在我继续之前,我只想确保我的人际关系正常。
所以我正在创建一个应用程序,您可以在其中根据您提供的输入生成不同的文档。所以,我创建了一个项目,在该项目中有一个选择字段,其中包含不同类型的文档。例如,如果我选择 DocumentA,则 DocumentA 的创建表单将显示给用户。如果我选择 DocumentB,则会显示 DocumentB 的创建表单。现在,尽管这些表单不同并且接受不同的输入,但我想要一种方法,我不必为每种文档类型创建一个新表。所以我想出了以下内容。
所以在一个项目中,我选择我要创建 DocumentA。然后显示视图 documentA.create。此视图具有文档名称和描述的隐藏输入。表单字段标签是 document_data 表中的键,值是该字段的输入。因此,如果我创建 DocumentA,我的数据库可能如下所示
project
id | projectName |
------------------
1 | Project One |
------------------
document
id | projectId | documentName |
--------------------------------
1 | 1 | DocumentA |
--------------------------------
document_data
id | documentId | key | value |
----------------------------------------------
1 | 1 | clientName | Google |
----------------------------------------------
2 | 1 | projectName | Analytics |
----------------------------------------------
3 | 1 | Contact | Mr Sharp |
----------------------------------------------
4 | 1 | startDate | 29/12/2016 |
----------------------------------------------
我现在苦苦挣扎的地方是外键 documentId 在 document_data 表中。但是,只有在我的两个模型类中都设置了外键时,事情才会起作用,例如
class Document extends Model
{
protected $table = 'documents';
protected $guarded = [];
public function documentData()
{
return $this->hasMany('App\DocumentData', 'documentId');
}
}
class DocumentData extends Model
{
protected $table = 'document_data';
protected $guarded = [];
public function document()
{
return $this->belongsTo('App\Document', 'documentId');
}
}
如果我没有在两个类中设置它,我会得到一个 MethodNotAllowedHTTP 异常,没有任何相关信息。我已经能够毫无问题地创建文档,当我需要更新时就会出现问题。 DocumentA 的编辑页面有一个这样开头的表单
{{ $document }}
{!! Form::model($project->document, [
'class'=>'form-horizontal',
'method' => 'PATCH',
'route' => ['projects.documents.update', $project, $project->document]
]) !!}
现在,当我在上面输出 $document 时,我得到了我正在处理的正确文档,这是我应该做的。但是,在更新功能中,如果我自己输出 $document 或者我这样做
public function update(Request $request, Project $project, Document $document)
{
dd($project->document);
return null;
}
我同时看到 DocumentA 和 DocumentB。更新不应该只通过 DocumentA 吗?
为什么会这样?非常感谢任何信息或建议。
非常感谢
【问题讨论】:
标签: laravel-5 laravel-5.1