Laravelで請求書に添付ファイルを追加する方法


  1. ファイルアップロードの設定: まず、Laravelでファイルをアップロードするための設定を行う必要があります。config/filesystems.phpファイルを開き、デフォルトのドライバを指定します。例えば、publicドライバを使用する場合は、以下のように設定します:
'default' => 'public',

また、config/filesystems.phpファイル内で、publicドライバの設定を行います。以下は一般的な設定例です:

'public' => [
    'driver' => 'local',
    'root' => public_path('uploads'),
    'url' => env('APP_URL').'/uploads',
    'visibility' => 'public',
],
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateInvoiceAttachmentsTable extends Migration
{
    public function up()
    {
        Schema::create('invoice_attachments', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('invoice_id');
            $table->string('file_name');
            $table->string('file_path');
            $table->timestamps();
            $table->foreign('invoice_id')
                ->references('id')
                ->on('invoices')
                ->onDelete('cascade');
        });
    }
    public function down()
    {
        Schema::dropIfExists('invoice_attachments');
    }
}
  1. コントローラの作成: ファイルのアップロードとデータベースへの保存を行うコントローラを作成します。以下は、例として使用できるコードの一部です:
namespace App\Http\Controllers;
use App\Models\Invoice;
use App\Models\InvoiceAttachment;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class InvoiceController extends Controller
{
    public function storeAttachment(Request $request, $invoiceId)
    {
        $invoice = Invoice::findOrFail($invoiceId);
        if ($request->hasFile('attachment')) {
            $file = $request->file('attachment');
            $fileName = $file->getClientOriginalName();
            $filePath = $file->store('attachments', 'public');
            $attachment = new InvoiceAttachment();
            $attachment->file_name = $fileName;
            $attachment->file_path = $filePath;
            $invoice->attachments()->save($attachment);
        }
        return redirect()->back()->with('success', '添付ファイルが追加されました。');
    }
}
  1. ルートの設定: 最後に、ファイルのアップロードを処理するためのルートを設定します。以下は、例として使用できるルートの一部です:
use App\Http\Controllers\InvoiceController;
Route::post('/invoices/{invoiceId}/attachments', [InvoiceController::class, 'storeAttachment'])
    ->name('invoices.attachments.store');

これで、請求書に添付ファイルを追加するための準備が整いました。以上の手順とコード例を参考にして、Laravelで添付ファイルを請求書に追加する方法を実装してみてください。もちろん、上記のコードはあくまで例ですので、プロジェクトの要件に合わせて調整する必要があります。