isSend =$isSend ; $this->branchId = $branchId; } public function handle() { if($this->isSend){ $sqlitePath = storage_path('app/database/tempUser.sqlite'); }else{ $sqlitePath = 'database/tempUser.sqlite'; } // 確保資料夾存在 if (!file_exists(dirname($sqlitePath))) { mkdir(dirname($sqlitePath), 0755, true); } // 如果檔案不存在就建立空檔案 if (!file_exists($sqlitePath)) { file_put_contents($sqlitePath, ''); } $connectionName = 'tempsqlite_' . md5($sqlitePath . microtime()); config(["database.connections.{$connectionName}" => [ 'driver' => 'sqlite', 'database' => $sqlitePath, 'prefix' => '', ]]); $exporter = new SqliteExportService($connectionName); $exporter->exportMultiple([ // --- users --- 'users' => [ 'modelClass' => User::class, 'tableSchema' => function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name'); $table->string('email')->unique(); $table->string('phone', 10)->unique(); $table->date('birthday')->nullable(); // 生日 $table->string('gender')->default('unset'); // 性別 $table->tinyInteger('status')->default(0); // 啟動 $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->rememberToken(); $table->text('api_plain_token')->nullable(); $table->timestamps(); }, 'transformer' => fn (User $user) => [ 'name' => $user->name, 'email' => $user->email, 'phone' => $user->phone, 'birthday' => $user->birthday, 'gender' => $user->gender?->value ?? 'unset', 'status' => $user->status, 'email_verified_at' => $user->email_verified_at, 'password' => $user->password, 'remember_token' => $user->remember_token, 'api_plain_token' => $user->api_plain_token, 'created_at' => $user->created_at, 'updated_at' => $user->updated_at, ], ], // --- password_reset_tokens --- 'password_reset_tokens' => [ 'query' => fn () => DB::table('password_reset_tokens'), 'tableSchema' => function (Blueprint $table) { $table->string('email')->index(); $table->string('token'); $table->timestamp('created_at')->nullable(); }, 'transformer' => fn ($row) => [ 'email' => $row->email, 'token' => $row->token, 'created_at' => $row->created_at, ], ], // --- personal_access_tokens --- 'personal_access_tokens' => [ 'query' => fn () => DB::table('personal_access_tokens'), 'tableSchema' => function (Blueprint $table) { $table->id(); $table->morphs('tokenable'); $table->string('name'); $table->string('token', 64)->unique(); $table->text('abilities')->nullable(); $table->timestamp('last_used_at')->nullable(); $table->timestamp('expires_at')->nullable(); $table->timestamps(); }, 'transformer' => fn ($row) => [ 'id' => $row->id, 'tokenable_type' => $row->tokenable_type, 'tokenable_id' => $row->tokenable_id, 'name' => $row->name, 'token' => $row->token, 'abilities' => $row->abilities, 'last_used_at' => $row->last_used_at, 'expires_at' => $row->expires_at, 'created_at' => $row->created_at, 'updated_at' => $row->updated_at, ], ], // --- roles --- 'roles' => [ 'query' => fn () => DB::table('roles'), 'tableSchema' => function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name'); $table->string('guard_name'); $table->timestamps(); }, 'transformer' => fn ($row) => [ 'id' => $row->id, 'name' => $row->name, 'guard_name' => $row->guard_name, 'created_at' => $row->created_at, 'updated_at' => $row->updated_at, ], ], // --- permissions --- 'permissions' => [ 'query' => fn () => DB::table('permissions'), 'tableSchema' => function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name'); $table->string('guard_name'); $table->timestamps(); }, 'transformer' => fn ($row) => [ 'id' => $row->id, 'name' => $row->name, 'guard_name' => $row->guard_name, 'created_at' => $row->created_at, 'updated_at' => $row->updated_at, ], ], // --- role_has_permissions --- 'role_has_permissions' => [ 'query' => fn () => DB::table('role_has_permissions'), 'tableSchema' => function (Blueprint $table) { $table->unsignedBigInteger('permission_id'); $table->unsignedBigInteger('role_id'); $table->primary(['permission_id', 'role_id']); }, 'transformer' => fn ($row) => [ 'permission_id' => $row->permission_id, 'role_id' => $row->role_id, ], ], // --- model_has_roles --- 'model_has_roles' => [ 'query' => fn () => DB::table('model_has_roles'), 'tableSchema' => function (Blueprint $table) { $table->unsignedBigInteger('role_id'); $table->string('model_type'); $table->unsignedBigInteger('model_id'); $table->primary(['role_id', 'model_id', 'model_type'], 'model_has_roles_primary'); }, 'transformer' => fn ($row) => [ 'role_id' => $row->role_id, 'model_type' => $row->model_type, 'model_id' => $row->model_id, ], ], // --- model_has_permissions --- 'model_has_permissions' => [ 'query' => fn () => DB::table('model_has_permissions'), 'tableSchema' => function (Blueprint $table) { $table->unsignedBigInteger('permission_id'); $table->string('model_type'); $table->unsignedBigInteger('model_id'); $table->index(['model_id', 'model_type']); $table->primary(['permission_id', 'model_id', 'model_type']); }, 'transformer' => fn ($row) => [ 'permission_id' => $row->permission_id, 'model_type' => $row->model_type, 'model_id' => $row->model_id, ], ], ]); if($this->isSend) SendSqliteFileJob::dispatch($sqlitePath, $this->branchId); } }