我遇到了覆盖数据的问题。我有一个文档模型和一个DocumentData模型。 Document可以有很多DocumentData。 所以我有一个数据捕获表单,在我的创建函数中,如果我输出请求,我会得到类似下面的内容
array:8 [▼
"_token" => "UHTN66xH4ChHpaxWAt4hWYFfpwUyjo6EunLp2iuV"
"whatData" => "rgfterter"
"whoData" => "tertertertert"
"startDate" => "28-04-2016"
"deliveryDate" => "30-04-2016"
"whyData" => "wefrwerwe"
"howData" => "rwerwerwer"
"filePath" => array:2 [▼
0 => UploadedFile {#30 ▼
-test: false
-originalName: "image.png"
-mimeType: "image/png"
-size: 788038
-error: 0
}
1 => UploadedFile {#31 ▼
-test: false
-originalName: "image2.png"
-mimeType: "image/png"
-size: 1091127
-error: 0
}
]
]
我需要做的是创建一个文档
$document = new Document();
$document->projectId = $project->id;
$document->name = 'Test Document';
$document->save();
然后使用上述数据执行documentData。 DocumentData本质上具有键/值,其中键是输入标签,值是输入的数据。 目前我正在这样做
$documentData = new DocumentData();
$documentData->documentId = $document->id;
foreach ($inputs as $key => $value) {
if($key !== '_token' && $key !== 'filePath') {
$documentData->key = $key;
$documentData->value = $value;
}
$documentData->save();
}
$fileString = "";
if (Input::hasFile('filePath')) {
$files = Input::file('filePath');
foreach($files as $file) {
$file->move(public_path('uploads'), $file->getClientOriginalName());
$fileString .= public_path('uploads') . '/' . $file->getClientOriginalName();
$documentData->key = 'File Path';
$documentData->value = $fileString;
$documentData->save();
}
}
文档创建正常,但我只为DocumentData获取一行 - 上次上传的文件路径。所以看起来其他行被覆盖了。 如何确保在我的数据库中正确记录所有输入?
由于
答案 0 :(得分:1)
为了方便您在Eloquent模型中建立一些关系。据我了解,Document
可以包含多个DocumentData
,因此您可以首先在{{1}中添加关系方法,为此设置一对多关系class:
Document
然后您可以在public function documentData()
{
// you should include the full namespace here
return $this->hasMany(App\DocumentData::class);
}
类上设置关系的另一面:
DocumentData
现在您可以使用这些关系方法访问和创建了!
我要通过一些调整来重写(我假设的)你的控制器动作,如果你不跟随,请告诉我。
public function document()
{
// again, you should include the full namespace here
return $this->belongsTo(App\Document::class);
}
注意事项:
快乐的编码!