0과 1을 공부하다.

[Laravel] Eloquent Model 작성 본문

Study/Web

[Laravel] Eloquent Model 작성

Developer_Jay 2022. 10. 13. 17:41
728x90



  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

 

라라벨 8.x - 시작하기

라라벨 한글 메뉴얼 8.x - 시작하기

laravel.kr

<?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);

 

 

 

참고 사이트

 

 

 

 

 

※ 본 게시글의 정보가 잘못 되었거나 부족한 부분에 대한 피드백을 환영합니다.

 

 

* CopyRight 2022. Jay Park All rights reserved.

728x90
Comments