- ファイルアップロードの設定:
まず、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');
}
}
- コントローラの作成: ファイルのアップロードとデータベースへの保存を行うコントローラを作成します。以下は、例として使用できるコードの一部です:
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', '添付ファイルが追加されました。');
}
}
- ルートの設定: 最後に、ファイルのアップロードを処理するためのルートを設定します。以下は、例として使用できるルートの一部です:
use App\Http\Controllers\InvoiceController;
Route::post('/invoices/{invoiceId}/attachments', [InvoiceController::class, 'storeAttachment'])
->name('invoices.attachments.store');
これで、請求書に添付ファイルを追加するための準備が整いました。以上の手順とコード例を参考にして、Laravelで添付ファイルを請求書に追加する方法を実装してみてください。もちろん、上記のコードはあくまで例ですので、プロジェクトの要件に合わせて調整する必要があります。