Laravel 5 - 保存的数据被覆盖

时间:2016-04-18 14:14:05

标签: laravel laravel-5 laravel-5.1

我遇到了覆盖数据的问题。我有一个文档模型和一个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 个答案:

答案 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);
}

注意事项:

  1. 代码中可能存在一些错误,因为我还没有对其进行测试, 如果情况确实如此,请发表评论并且需要帮助
  2. 如果这个答案对你很有用,那可能会更好 重要的是要了解为什么你的初始方法没有!您 没有为您上传的每个文件在数据库中创建新条目 加上一些其他小问题。
  3. 熟悉Eloquent和人际关系,他们真的很好 功能强大,即使你能掌握也能省去很多头痛 一些基础知识,它将使您的数据库交互更加简单!
  4. 快乐的编码!