【发布时间】:2016-04-18 14:14:04
【问题描述】:
我遇到了数据被覆盖的问题。我有一个文档模型和一个 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 - 最后上传的文件路径。所以看起来其他行正在被覆盖。 如何确保所有输入都正确记录在我的数据库中?
谢谢
【问题讨论】:
-
1.如果您正确建立关系,
$documentData->documentId = $document->id;是不必要的;你可以这样做:$documentData->document()->saveMany()- 2. 我推荐reading the Eloquent documentation,因为离你不远。 3.我不建议你循环输入数据和设置属性,更明确会更好。 -
我不确定我是否正确理解了您的问题,但是您是否尝试创建多个
DocumentData实例,如果是这样,那么您的处理方式错误。您最终的代码 sn-p 不会在每个上传文件的 db 中创建一个新的DocumentData条目,它只会继续写入同一个条目,这就是您只看到最后一个上传文件的原因。您需要在 for 循环中新建一个新实例才能创建多个实例。在任何情况下,您都应该按照 ash 的建议查找关系。
标签: laravel laravel-5 laravel-5.1