일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- C언어
- data serialization formats
- 네이버클라우드
- ci/cd
- OnlineIDE
- kubernetes
- 3D프린터입문
- Kotlin
- 코틀린개발환경
- 3d프린터 초보
- Jenkins
- gitlab
- 3D 프린터 용어
- nas
- 3D
- docker container
- 3D프린터 입문
- linux job
- 3D프린터
- Notification
- 리눅스 파일동기화
- git
- Token인증방식
- docker
- 데이터 직렬화 포맷
- octoprint
- github
- NAS HDD교체
- IoTNetwork
- 3D모델링
- Today
- Total
0과 1을 공부하다.
[Laravel] Eloquent Model 작성 본문
Laravel 에서 데이터베이스 테이블과 상호작용 하기 위해 사용하는 도구는 크게 쿼리빌더(Query Builder)와 옐로퀸트 모델(Eloquent Model)이 있다.
옐로퀸트는 라라벨에서 제공하는 ORM(Object Relational Mapping), 데이터베이스 테이블에 대응하는 모델(Model)의 프로퍼티에 매핑되는 액티브레코드 ORM이다.
큰 설명 필요없이 예제를 통해 감을 익혀본다.
DB table 생성
먼저 예제로 사용할 테이블을 수동으로 생성한다.
user 테이블에 id(int), name(varchar) phone(varchar) (PRI:id) 컬럼을 추가한다.
model 생성
php artisan 을 통해 아래 명령어로 모델을 생성한다. (꼭 테이블 이름로 할 필요는 없다.)
생성한 모델은 app/Models 경로에 생성된다.
$ php artisan make:model "이름 입력"
controller 생성
model과 동일하게 php artisan을 통해 컨트롤러를 생성한다.
$ php artisan make:controller "이름 입력"
app/Http/Controllers 경로에 컨트롤러가 생성되면 앞서 생성한 model을 use한다.
use App\Models\user_table; // 추가
web.php 라우팅
웹에서 response 를 받기 위해 라우팅한다.
본 예제에서는 전달할 body 데이터가 없기 때문에 get 방식으로 호출한다. get 메소드에서 1번째 인자는 라우팅 이름을 입력하고 2번째 인자는 클래스 경로와 메소드를 리스트 형태로 입력한다.
Route::get('/user', [App\Http\Controllers\User_controll::class, 'test_response']);
model 옵션 작성
생성한 user_table model class에 아래와 같은 옵션을 상황에 따라 기입한다.
설정 할 수 있는 옵션은 너무 많다. 자세한 내용은 Larabel 공식 문서를 참고한다.
https://laravel.kr/docs/8.x/eloquent#introduction
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class user_table extends Model
{
use HasFactory;
protected $table = 'user'; // 테이블 이름 (지정하지 않으면 class name으로 지정)
public $timestamps = false; // timestamps 활성화 여부 (created_at 및 updated_at 컬럼)
protected $primaryKey = 'id'; // 기본키(Primarykey)
public $incrementing = false; // 기본키가 증가하는 정수는 true, 증가하지 않거나 문자열이라면 false
//protected $fillable = ['id','name','phone']; // 대량 할당 허용 컬럼
protected $guarded = []; // 대량 할당 불허 컬럼 (공백: 모두 허용)
}
Table insert, select, update, delete
insert, select, update, delete 쿼리를 실행하기 위한 방법으로 대량 할당(Mass Assignment)하는 방법과 속성을 지정하는 방법이 있다. 아래 코드에서 insert(1)이 대량 할당 하는 방법의 예시이다. 대량 할당을 하기 위해서는 앞서 작성한 model에서 $fillable 속성 또는 $guarded을 지정해야 한다. Laravel에서 기본적으로 대량 할당에서 생기는 취약점을 방지 하기 위해 기본적으로 모든 필드를 불허한다고 한다. 또한 insert(1)처럼 클래스 이름을 직접 사용하여 파사드처럼 쓸 수 있고 insert(2)처럼 객체를 직접 만들어서 메서드를 호출 할 수 있다. 각 예시는 아래와 같다.
// insert(1) 대량 할당
$input = user_table::create([
'id' => 1929,
'name' => 'test_1',
'phone' => '010-1234-5678'
]);
return response()->json(['result' => $input, 'task' => $input], 200, [], JSON_PRETTY_PRINT);
// insert(2) 속성지정
$insert_data = new user_table(); // user_table 인스턴스 생성
$insert_data->id=15224; // 'id' Cloumns 값 추가
$insert_data->name='test'; // 'name' Cloumns 값 추가
$insert_data->phone = '010-1234-5678'; // 'phone' Cloumns 값 추가
$result = $insert_data->save(); // save 메소드 호출
return response()->json(['result' => $result, 'task' => $insert_data], 200, [], JSON_PRETTY_PRINT);
// select(모든 데이터)
$select_data = user_table::all();
return response()->json($select_data, 200, [], JSON_PRETTY_PRINT);
// select(특정 데이터(pri key))
$select_data = user_table::find(1929);
return response()->json($select_data, 200, [], JSON_PRETTY_PRINT);
// update
$update_data = user_table::find(1929);
$update_data->name = 'test_update';
$result = $update_data->save();
return response()->json(['result' => $result, 'task' => $update_data],200, [], JSON_PRETTY_PRINT);
// delete
$delete_data = user_table::find(152241);
$result = $delete_data -> delete();
return response()->json(['result' => $result, 'task' => $delete_data],200, [], JSON_PRETTY_PRINT);
참고 사이트
- https://pronist.dev/142?category=844807
- https://www.lesstif.com/laravelprog/create-update-27295820.html
- https://laravel.kr/docs/8.x/eloquent#introduction
※ 본 게시글의 정보가 잘못 되었거나 부족한 부분에 대한 피드백을 환영합니다.
* CopyRight 2022. Jay Park All rights reserved.
'Study > Web' 카테고리의 다른 글
[Laravel] Laravel 프로젝트에 Swagger 적용 (0) | 2023.02.13 |
---|---|
[Laravel] Laravel 형상관리 (0) | 2022.10.27 |
[Laravel] Laravel 설치 및 개요 (0) | 2022.10.13 |
[Apache] 특정 디렉터리 Http Authentication 적용 (0) | 2022.07.24 |
[PHP] PHPUnit Test 환경구성 및 테스트 (0) | 2022.04.14 |