백엔드/laravel
-
Laravel에서 Eloquent ORM과 Query Builder 사용 비교백엔드/laravel 2024. 1. 20. 18:59
소개: 이 섹션에서는 Laravel에서 제공하는 Eloquent ORM(Object Relational Mapper)과 Query Builder를 비교하고 각각의 특징과 장단점을 살펴보겠습니다. 1. Eloquent ORM 소개 ORM이란?: Object Relational Mapper는 객체 지향 구문을 사용하여 데이터베이스와 상호 작용하는 프로그래밍 기술입니다. Eloquent 특징: 객체 지향적인 구문으로 데이터베이스와 상호 작용 가능. 내장된 기능으로 자동 타임스탬프, 소프트 삭제, 이저 로딩 등이 포함됨. Fluent한 체이너블 구문을 사용한 강력한 쿼리 빌더 제공. 2. Eloquent의 단점 성능 이슈: 대량의 데이터셋과 함께 사용할 때 Eloquent는 원시 SQL보다 성능이 느릴 수 있음..
-
Trait 로 model Scopes 정리하기백엔드/laravel 2024. 1. 20. 18:45
트레이트(Trait)는 Laravel 모델의 스코프를 정리하고 중복을 피하며 코드를 구조화하는 데 효과적인 방법이다. Post 모델의 스코프를 트레이트로 정리하는 방법을 알아보겠습니다. 1. 트레이트 생성하기 먼저, app/Models 디렉터리에 PostScopes.php라는 이름의 트레이트 파일을 만듭니다. app/Models/PostScopes.php 생성 namespace App\Models; trait PostScopes { public function scopePublished($query) { return $query->where('is_published', true); } public function scopePublishedByUser($query, $userId) { return $que..
-
Local Scopes 와 Dynamic Scopes 사이의 주요 차이 중 하나백엔드/laravel 2024. 1. 20. 18:27
로컬 스코프(Local Scopes): 로컬 스코프는 인자를 받지 않습니다. 로컬 스코프는 주로 고정된 조건을 적용하여 자주 사용되는 쿼리를 간편하게 사용할 수 있도록 하는 데 중점을 둡니다. 로컬 스코프를 정의할 때는 메서드에서 하드 코딩된 조건을 지정하며, 쿼리 빌더를 반환합니다. // 로컬 스코프 정의 public function scopePublished($query) { return $query->where('is_published', true); } // 사용 예 $publishedPosts = Post::published()->get(); 다이내믹 스코프(Dynamic Scopes): 다이내믹 스코프는 인자를 받아 런타임에 동적으로 쿼리를 수정하는 데 중점을 둡니다. 동적 스코프를 정의할 때..
-
라라벨 dynamic scope.백엔드/laravel 2024. 1. 20. 18:25
다이내믹 스코프는 Eloquent 모델에서 사용되는 동적인 쿼리 스코핑 방법으로, 런타임에 조건을 변경할 수 있게 해줍니다. 이것은 메서드 형태로 모델에 추가되며, 런타임에 전달되는 인자에 따라 동적으로 쿼리를 수정합니다. 다이내믹 스코프의 일반적인 정의 형태는 다음과 같습니다. public function scopeScopeName($builder, $parameter1, $parameter2, ...) { // $builder는 Illuminate\Database\Eloquent\Builder 인스턴스입니다. // $parameter1, $parameter2 등은 런타임에 전달되는 인자입니다. // 조건을 추가하여 동적으로 쿼리를 변경합니다. return $builder->where(...)->orW..
-
라라벨 local scopes백엔드/laravel 2024. 1. 20. 17:49
로컬 스코프는 Eloquent 모델에서 특정 쿼리를 정의하고 재사용하기 위한 방법입니다. 이를 정의하기 위해서는 모델 클래스 내에 특정한 메서드를 만들어야 합니다. 로컬 스코프의 명명 규칙과 정의 방법을 알아보겠습니다. 1. 로컬 스코프 정의 방법 로컬 스코프는 모델 클래스 내의 메서드로 정의됩니다. 이 메서드는 scope 접두사로 시작해야 합니다. public function scopeScopeName($builder, $parameter1, $parameter2, ...) { // 쿼리 빌더에 대한 로직을 작성 return $builder->where(...); } scopeName: 로컬 스코프의 이름. 이 이름은 스코프를 호출할 때 사용됩니다. $builder: 쿼리 빌더 인스턴스. 쿼리 빌더를 ..
-
라라벨 global scopes백엔드/laravel 2024. 1. 20. 16:51
전역 범위(global scopes)는 특정 모델에 대해 실행되는 모든 쿼리에 제약 조건을 추가할 수 있는 eloquent의 강력한 기능입니다. 사용자 모델이 있고 잔액이 특정 숫자보다 적은 사용자만 검색하고 싶다고 가정해 보겠습니다. 1. 전역 범위 생성하기 php artisan make:scope BalanceVerifiedScope app\Models\Scopes\BalanceVerifiedScope.php 파일이 생성됨 public function apply(Builder $builder, Model $model): void { $builder->where(column: 'balance', oprator: '
-
라라벨 기존 모델의 복사본(replicate) 만들기백엔드/laravel 2024. 1. 20. 15:26
replicate 메서드는 복제된 모델의 모든 속성을 가진 새로운 모델 인스턴스를 생성합니다. 먼저, 새로운 게시물을 생성하는 코드를 만들어 봅시다. $post = Post::create([ 'title' => 'Replicate', 'slug' => 'replicate', 'excerpt' => 'This tutorial is about replicating content', 'description' => 'This tutorial is about replicating', ]); 이제 모델을 복제하려면 새로운 게시물에서 replicate 메서드를 호출하면 됩니다. $replicatedPost = $post->replicate(); title 및 slug는 고유해야 하기 때문에 오류가 발생합니다. 이를 ..
-
라라벨 소프트 삭제(soft deleting)된 레코드를 주기적으로 삭제하기백엔드/laravel 2024. 1. 20. 14:26
Prunable 트레이트를 모델에 추가하여 사용할 수 있습니다. use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\Prunable; class Post extends Model { use SoftDeletes, Prunable; // SoftDeletes와 Prunable 트레이트 추가 // Prunable 트레이트를 사용하기 위한 메서드 추가 public function prunable($query) { // 1개월 이전에 소프트 삭제된 레코드를 삭제하는 로직 return $query->where('deleted_at', '