Laravel Eloquent에 대해 반드시 알아야 할 7가지 최신 팁

라라벨은 데이터베이스와의 상호작용을 즐겁게 해주는 ORM(Object-Relational Mapper)인 Eloquent를 포함하고 있습니다. Eloquent ORM은 단순한 메커니즘처럼 보이지만 그 내부에는 반쯤 숨겨진 기능이 많이 있고 이를 통해 더 많은 것을 달성할 수 있는 잘 알려지지 않은 방법이 있습니다. 이 기사에서는 Laravel Eloquent 및 DB 모델과 관련된 최신 팁과 요령을 보여드리겠습니다.

JSON Where 절



라라벨은 JSON 열을 지원하는 데이터베이스에 쿼리할 수 있는 헬퍼를 제공합니다.

Currently, MySQL 5.7+, PostgreSQL, SQL Server 2016, and SQLite 3.9.0 (using the JSON1 extension)
// To query a json column you can use the -> operator
$users = User::query()
            ->where('preferences->dining->meal', 'salad')
            ->get();
// You can check if a JSON array contains a set of values
$users = User::query()
            ->whereJsonContains('options->languages', [
                'en', 'de'
               ])
            ->get();
// You can also query by the length of a JSON array
$users = User::query()
            ->whereJsonLength('options->languages', '>', 1)
            ->get();


if-else 문을 작성하지 않고 조건절을 쿼리에 연결



쿼리 빌더의 "언제"도우미는 🔥입니다.
문을 작성하지 않고 쿼리에 조건절을 연결할 수 있습니다if-else.
이렇게 하면 쿼리가 매우 명확해집니다.

class RatingSorter extends Sorter
{
    function execute(Builder $query)
    {
        $query
            ->selectRaw('AVG(product_ratings.rating) AS avg_rating')
            ->join('product_ratings', 'products.id', '=', 'product_ratings.product_id')
            ->groupBy('products.id');
            ->when(
                $this->direction === SortDirections::Desc,
                fn () => $query->orderByDesc('avg_rating')
                fn () => $query->orderBy('avg_rating'),
            );

        return $query;
    }
}


테이블의 모든 열 이름 가져오기




DB::getSchemaBuilder()->getColumnListing('users');
/*
returns [
    'id',
    'name',
    'email',
    'email_verified_at',
    'password',
    'remember_token',
    'created_at',
    'updated_at',
]; 
*/


접근자 캐싱



Laravel 9.6부터 연산 집약적인 접근자가 있는 경우 shouldCache 메서드를 사용할 수 있습니다.

public function hash(): Attribute
{
    return Attribute::make(
        get: fn($value) => bcrypt(gzuncompress($value)),
    )->shouldCache();
}


새로운 scalar() 메서드



Laravel 9.8.0에서는 쿼리 결과에서 첫 번째 행의 첫 번째 열을 검색할 수 있는 scalar() 메서드가 추가되었습니다.

// Before
DB::selectOne("SELECT COUNT(CASE WHEN food = 'burger' THEN 1 END) AS burgers FROM menu_items;")->burgers
// Now
DB::scalar("SELECT COUNT(CASE WHEN food = 'burger' THEN 1 END) FROM menu_items;")


특정 열 선택



모델에서 특정 열을 선택하려면 select 메소드를 사용하거나 배열을 get 메소드에 직접 전달할 수 있습니다!

// Select specified columns from all employees
$employees = Employee::select(['name', 'title', 'email'])->get();
// Select specified columns from all employees
$employees = Employee::get(['name', 'title', 'email']);


두 열의 값 비교


whereColumn 메서드를 사용하여 두 열의 값을 비교할 수 있습니다.

return Task::whereColumn('created_at', 'updated_at')->get();
// pass a comparison operator
return Task::whereColumn('created_at', '>', 'updated_at')->get();


Eloquent는 위에서 설명한 뛰어난 기능을 많이 가지고 있습니다. 도움이 되기를 바라며 Laravel 프로젝트에서 구현하시기 바랍니다.

Twitter에서 팔로우:

  • [
  • 좋은 웹페이지 즐겨찾기