/ database / migrations / 2021_08_11_065248_create_documents_table.php
2021_08_11_065248_create_documents_table.php
 1  
 2  <?php
 3  
 4  use App\Models\Review;
 5  use Illuminate\Database\Migrations\Migration;
 6  use Illuminate\Database\Schema\Blueprint;
 7  use Illuminate\Support\Facades\Schema;
 8  
 9  class CreateDocumentsTable extends Migration
10  {
11      /**
12       * Run the migrations.
13       *
14       * @return void
15       */
16      public function up()
17      {
18          Schema::create('revisions', function (Blueprint $table) {
19              $table->id();
20              $table->boolean('is_draft')->default(false)->index();
21              $table->string('hash')->nullable();
22              $table->string('path')->nullable();
23              $table->string('name')->nullable(); //original name
24              $table->string('version')->nullable();
25              $table->bigInteger('size')->nullable();
26              $table->foreignId('previous_id')->nullable();
27              $table->foreignId('document_id');
28              $table->string('from')->nullable();
29              $table->dateTime('approved_at')->nullable();
30              $table->unique(['document_id', 'version']);
31              $table->foreignId('created_by');
32              $table->foreign('created_by')->references('id')->on('users');
33              $table->foreignid('approved_by')->nullable()->references('id')->on('users');
34              $table->foreignid('reviewed_by')->nullable()->references('id')->on('users');
35              $table->dateTime('reviewed_at')->nullable();
36              $table->foreignId('template_id')->nullable()->constrained('templates')->cascadeOnUpdate()->nullOnDelete();
37              $table->boolean('needs_review')->default(true);
38              $table->timestamps();
39              $table->softDeletes();
40          });
41  
42          Schema::create('documents', function (Blueprint $table) {
43              $table->id();
44              $table->foreignId('type_id');
45              $table->integer('number');
46              $table->unique(['type_id', 'number']);
47              $table->string('name');
48              $table->string('description')->nullable();
49              $table->string('from')->nullable();
50              $table->foreignId('original_id')->nullable();
51              $table->foreign('original_id')->references('id')->on('revisions');
52              $table->foreignId('head_id')->nullable();
53              $table->foreign('head_id')->references('id')->on('revisions');
54              $table->foreignId('dossier_id')->nullable();
55              $table->foreign('dossier_id')->references('id')->on('dossiers');
56              $table->foreignId('meet_id')->nullable();
57              $table->foreignId('created_by')->nullable()->constrained('users')->cascadeOnUpdate()->nullOnDelete();
58              $table->foreignId('folder_id')->nullable()->constrained('folders')->cascadeOnUpdate()->nullOnDelete();
59              $table->foreignId('template_id')->nullable()->constrained('templates')->cascadeOnUpdate()->nullOnDelete();
60              // $table->foreign('meet_id')->references('id')->on('meets');
61              $table->foreignId('eml_template_id')->nullable()->constrained('eml_templates')->cascadeOnUpdate()->nullOnDelete();
62              $table->softDeletes();
63              $table->timestamps();
64          });
65  
66          // declarar las relaciones independientemente del orden de creacion de las tablas
67          Schema::table('revisions', function (Blueprint $table) {
68              $table->foreign('previous_id')->references('id')->on('revisions');
69              $table->foreign('document_id')->references('id')->on('documents');
70          });
71      }
72  
73      /**
74       * Reverse the migrations.
75       *
76       * @return void
77       */
78      public function down()
79      {
80          Schema::dropIfExists('documents');
81          Schema::dropIfExists('revisions');
82      }
83  }