Laravel CRUD 기본코드
Laravel 프로젝트 만들기 참조
table 명 : samples
테이블 만들기
php artisan make:migration create_samples_table --create=samples
DB 테이블 만들기 파일이 생성됨.
/database/migrations/날짜_create_samples_table.php
가장 많이 사용하는 명령어 (3개 파일이 한번에 생성됨, model, migration, controller)
php artisan make:model -mrc Sample
다음과 같이 추가함.
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('samples', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->text('detail');
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('samples');
}
};
설정된 내용으로 samples db table 생성하기
php artisan migrate
컨트롤러와 모델 생성하기
php artisan make:controller SampleController --resource --model=sample
app/Http/Controllers/SampleController.php
<?php
namespace App\Http\Controllers;
use App\Models\sample;
use Doctrine\DBAL\Schema\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
class SampleController extends Controller
{
public function index()
{
$samples = Sample::latest()->paginate(5);
return view("samples.index", compact("samples"))
->with("i", (request()->input('page', 1) - 1) * 5);
;
}
public function create()
{
return view('samples.create');
}
public function store(Request $request)
{
$request->validate([
'name' => 'required',
'detail'=> 'required',
]);
$sample->update($request->all());
//$sample = Sample::create($request->except(['_token']));
return redirect()->route('samples.index')->with('success','저장되었습니다.!!');
}
public function show(Sample $sample)
{
return view('samples.show', compact('sample'));
}
public function edit(sample $sample)
{
return view('samples.edit', compact('sample'));
}
public function update(Request $request, sample $sample) : RedirectResponse
{
$request->validate([
'name' => 'required',
'detail' => 'required',
]);
$sample->update($request->all());
//$sample->update($request->except(['_token', '_method']));
return redirect()->route('samples.index')->with('success','수정되었습니다.');
}
public function destroy(sample $sample) : RedirectResponse
{
$sample->delete();
return redirect()->route('samples.index')->with('success','삭제되었습니다.');
}
}
라우터 설정
use App\Http\Controllers\SampleController;
Route::resource('samples', SampleController::class);
view 파일 추가하기
index.blade.php
views/samples/index.blade.php
<div>
<div>
<h2>Sample CRUD</h2>
</div>
<div>
<a href="{{ route('samples.create') }}">Create New sample</a>
</div>
</div>
@if ($message = Session::get('success'))
<div>
<p>{{ $message }}</p>
</div>
@endif
<table border="1">
<tr>
<th>No</th>
<th>Name</th>
<th>Details</th>
<th>Action</th>
</tr>
@foreach ($samples as $sample)
@if ($loop->odd)
<tr style="background-color: rgb(175, 194, 231)">
@else
<tr>
@endif
<td>{{ ++$i }}</td>
<td>{{ $sample->name }}</td>
<td>{{ $sample->detail }}</td>
<td>
<form action="{{ route('samples.destroy',$sample->id) }}" method="POST">
<a href="{{ route('samples.show',$sample->id) }}">Show</a>
<a href="{{ route('samples.edit',$sample->id) }}">Edit</a>
@csrf
@method('DELETE')
<button type="submit">Delete</button>
</form>
</td>
</tr>
@endforeach
</table>
{!! $samples->links() !!}
create.blade.php
views/samples/create.blade.php
<div>
<div>
<h2>Add New Product</h2>
</div>
<div>
<a href="{{ route('samples.index') }}"> Back</a>
</div>
</div>
@if ($errors->any())
<div>
<strong>에러발생</strong> 입력내용을 다시한번 확인해주세요.!!<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="{{ route('samples.store') }}" method="POST">
@csrf
<div>
<div>
<div>
<strong>Name:</strong>
<input type="text" name="name" placeholder="Name">
</div>
</div>
<div>
<div>
<strong>Detail:</strong>
<textarea name="detail" placeholder="Detail"></textarea>
</div>
</div>
<div>
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
show.blade.php
views/samples/show.blade.php
<div>
<div>
<h2> Show sample</h2>
</div>
<div>
<a href="{{ route('samples.index') }}"> Back</a>
</div>
</div>
<div>
<div>
<div>
<strong>Name:</strong>
{{ $sample->name }}
</div>
</div>
<div>
<div>
<strong>Details:</strong>
{{ $sample->detail }}
</div>
</div>
</div>
edit.blade.php
views/samples/edit.blade.php
<div>
<div>
<h2>Edit sample</h2>
</div>
<div>
<a href="{{ route('samples.index') }}"> Back</a>
</div>
</div>
@if ($errors->any())
<div>
<strong>Whoops!</strong> There were some problems with your input.<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="{{ route('samples.update',$sample->id) }}" method="POST">
@csrf
@method('PUT')
<div>
<div>
<div>
<strong>Name:</strong>
<input type="text" name="name" value="{{ $sample->name }}" placeholder="Name">
</div>
</div>
<div>
<div>
<strong>Detail:</strong>
<textarea name="detail" placeholder="Detail">{{ $sample->detail }}</textarea>
</div>
</div>
<div>
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
실행하기
php artisan serve
http://127.0.0.1:8000/samples
728x90
'Laravel' 카테고리의 다른 글
Laravel - Socialite - Two\InvalidStateException 에러 (0) | 2023.12.27 |
---|---|
Laravel - 로컬개발 환경설정 (Homestead with VirtualBox) (0) | 2023.12.22 |
Laravel - Request 객체 다루기 (0) | 2023.11.21 |
Laravel Breeze 와 Laravel Jetstream 차이점. (0) | 2023.11.19 |
Laravel - Jetstream Teams 설치하기 (0) | 2023.11.19 |