У меня проблема с перезаписи данных. У меня есть модель документа и модель DocumentData. Документ может иметь много DocumentData. Так у меня есть форма ввода данных, и в моем создать функцию, если я вывожу запрос я получаю что-то вроде следующегоLaravel 5 - Сохраненные данные перезаписаны
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. Я рекомендую [читать документацию «Плохо» (https://laravel.com/docs/master/eloquent-relationships#introduction), потому что вы «Не так далеко. 3.Я не рекомендую вам перебирать входные данные и устанавливать свойства, быть более явным будет лучше. – ash
Я не уверен, что правильно понимаю ваш вопрос, но вы пытаетесь сделать несколько экземпляров 'DocumentData', если так, тогда вы идете по нему не так. Ваш окончательный фрагмент кода не создает новую запись «DocumentData» в db для загружаемого файла, она просто будет записывать одну и ту же запись, поэтому вы видите только последний загруженный файл. Вам нужно создать новый экземпляр в цикле for, чтобы он мог создавать несколько экземпляров. В любом случае вы должны, так как пепел рекомендуется искать отношения. – haakym