2015-12-18 114 views
1

我有一個系統,您可以創建不同類型的文檔。最初,我爲每個文檔都有一個新的模型,但我不認爲這是最好的方式,因爲它可以快速地混亂。所以我想要做的是製作一個通用的文檔模型,並有單獨的文檔來自此。我想出了以下類型的設計 Database designLaravel 5 - 關係和處理數據

因此,一個Document可以有一個DocumentA和一個DocumentB。 DocumentA和DocumentB只能在每個項目中創建一次,這就是爲什麼我有這種關係。現在,每個文檔的每個表單都有一個上傳按鈕,支持文檔可以與生成的文檔一起上傳。所以Documents可以有一個到多個FileUpload。

這是我困惑的地方。一個人訪問我的門戶並選擇創建DocumentA的選項。現在向他們顯示一個表格,如下所示: 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正確處理它。我將以許多不同的文檔結束,他們每個人都接受不同的輸入。

任何意見讚賞。

謝謝

+0

你想cr爲每個文檔分配不同的表格?就像你在A和B上面展示的那樣。它會變得混亂。你爲什麼不用一個標識符欄來管理這個表? –

+0

你有沒有找到這個解決方案?我現在需要一個:D – Stretsh

回答

1

你想爲每個文檔創建不同的表?就像你在A和B上面展示的那樣。它會變得混亂。你爲什麼不用一個標識符欄來管理這個表?

如果您創建的文件一個表,一個用於文件上傳,那麼你會創造像這樣
文件上傳模型它們之間的關係

<?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 
+1

感謝您的意見。理想情況下,我只需要一個Document模型。我唯一無法弄清的是每個文檔都有不同的輸入,所以我該如何處理?謝謝 –