【问题标题】:Laravel 5 - relationships and handling dataLaravel 5 - 关系和处理数据
【发布时间】:2015-12-18 22:11:39
【问题描述】:

我有一个系统,您可以在其中创建不同类型的文档。最初,我为每个文档都有一个新模型,但我认为这不是最好的方法,因为它会很快变得混乱。所以我想做的是制作一个通用的 Documents 模型,并让单个文档来自这个模型。我想出了以下类型的设计

所以一个 Document 可以有一个 DocumentA 和一个 DocumentB。 DocumentA 和 DocumentB 每个项目只能创建一次,这就是我有这种关系的原因。现在,每个文档的每个表单都有一个上传按钮,支持文档可以与生成的文档一起上传。所以 Documents 可以有一对多的 FileUploads。

这就是我困惑的地方。有人访问我的门户并选择创建 DocumentA 的选项。现在向他们显示一个类似于以下内容的表单

于是他们为 DocumentA 输入数据,上传支持文件,然后点击提交。

现在我正在考虑如何在 Laravel 中处理这个问题。

据我了解,应该是这样的

public function store(Request $request, Project $project)
{
    $document = new Documents();
    $document->documentName = 'Something';
    $document->documentA = new DocumentA();
    $document->documentA->startDate = Input::get('startDate');
    $document->documentA->endDate = Input::get('endDate');
    $document->documentA->notes = Input::get('notes');

    if (Input::hasFile('filePath')) {
        $files = Input::file('filePath');
        foreach($files as $file) {
            $fileString = "";
            $file->move(public_path('uploads'), $file->getClientOriginalName());

            $fileString .= public_path('uploads') . '/' . $file->getClientOriginalName();

            $document->fileUpload = new FileUploads();
            $document->fileUpload->filename = $file->getClientOriginalName();
            $document->fileUpload->mime = $file->getClientOriginalExtension();
            $document->fileUpload->filepath = $fileString;
            $document->fileUpload->documentId = $document->id;
        }
    }

    $document->save();

    return Redirect::route('projects.documentA.edit', compact('project', 'documents'));
}

真的,正在寻找关于我是否正确设计它以及我是否在 Laravel 中正确处理它的建议。我将得到许多不同的文档,每个文档都接受不同的输入。

任何建议表示赞赏。

谢谢

【问题讨论】:

  • 您想为每个文档创建不同的表格吗?就像你在上面展示的 A 和 B 一样。它会变得混乱。为什么不使用一些标识符 col 在一个表中管理它?
  • 您找到解决方案了吗?我现在需要一个:D

标签: model-view-controller database-design laravel-5


【解决方案1】:

您想为每个文档创建不同的表格吗?就像您在上面为 A 和 B 显示的那样。它会变得混乱。为什么不使用一些标识符 col 在一个表中进行管理?

如果您为文档创建一个表,为 fileUploads 创建一个表,那么您将像这样在它们之间创建关系
文件上传模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class File extends Model
{
    /**
     * each file belongs to a document
     */
    public function document()
    {
        return $this->belongsTo('App\Document', 'foreign_key', 'primary_key');
    }
}

文档模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Document extends Model
{
    /**
     * document has multiple files
     */
    public function files()
    {
        return $this->hasMany('App\File', 'foreign_key', 'primary_key');
    }
}

然后你可以像这样访问记录

$documents->files()->where('id', 1)->get();
//gives file associated with document id 1

【讨论】:

  • 感谢您的意见。理想情况下,我只想要一个 Document 模型。我唯一想不通的是每个 Document 都有不同的输入,那么我该如何处理呢?谢谢
猜你喜欢
  • 2016-08-16
  • 1970-01-01
  • 1970-01-01
  • 2017-03-15
  • 2017-03-25
  • 1970-01-01
  • 2018-05-07
  • 1970-01-01
相关资源
最近更新 更多