programing

Laravel Archent 쿼리에서 테이블에 별칭을 지정하는 방법(또는 Query Builder 사용)

goodsources 2022. 10. 21. 23:00
반응형

Laravel Archent 쿼리에서 테이블에 별칭을 지정하는 방법(또는 Query Builder 사용)

Larabel의 쿼리 빌더를 사용하고 있다고 합시다.

$users = DB::table('really_long_table_name')
           ->select('really_long_table_name.id')
           ->get();

다음 SQL과 동등한 SQL을 찾고 있습니다.

really_long_table_name AS short_name

이는 많은 선택 항목과 위치를 입력해야 할 때 특히 유용합니다(또는 일반적으로 선택 항목의 열 별칭에도 별칭을 포함하며 결과 배열에서 사용됩니다).테이블 에일리어스가 없으면 타이핑이 많아지고 모든 것이 읽기 어려워집니다.라라벨 문서에서 답을 찾을 수 없다고요, 아이디어라도 있나요?

Laravel은 테이블 및 열의 별칭을 지원합니다.AS.해라

$users = DB::table('really_long_table_name AS t')
           ->select('t.id AS uid')
           ->get();

멋진 솜씨로 실전을 보자.tinker도구.

$php 장인 팅커[1] > 스키마::create('really_long_table_name', 함수($table) {$table->increments('id');} ;
// 특수한 순서[2] > DB::table ('really_long_table_name')-> insert (['id' => null]);// 참[3] > DB::table('really_long_table_name AS t')-> select t.id AS uid'-> get();// 어레이()// 0 = > 객체(stdClass) (// 'uid' => '1'//   )// )

웅변적인 모델에서 에일리어스를 사용하려면 다음과 같이 코드를 수정합니다.

Item
    ::from( 'items as items_alias' )
    ->join( 'attachments as att', DB::raw( 'att.item_id' ), '=', DB::raw( 'items_alias.id' ) )
    ->select( DB::raw( 'items_alias.*' ) )
    ->get();

이렇게 하면 테이블 이름에 테이블 접두사가 자동으로 추가되고 다음 인스턴스가 반환됩니다.Itemsmodel. 완전 쿼리 결과가 아닙니다.추가 중DB::raw는 라라벨이 테이블프리픽스를 에일리어스에 추가하지 않도록 합니다.

방법은 이렇다.참가의 예를 들면, 다른 사람에게 확실히 전달하도록 하겠습니다.

$products = DB::table('products AS pr')
        ->leftJoin('product_families AS pf', 'pf.id', '=', 'pr.product_family_id')
        ->select('pr.id as id', 'pf.name as product_family_name', 'pf.id as product_family_id')
        ->orderBy('pr.id', 'desc')
        ->get();

이게 도움이 됐으면 좋겠다.

웅변으로 사용하다.모델 위에 추가

protected $table = 'table_name as alias'

//table_name은 데이터베이스와 같아야 합니다.

..그러면 다음과 같이 쿼리에 사용합니다.

ModelName::query()->select(alias.id, alias.name)

다음과 같이 적은 코드를 사용할 수 있습니다.

    $users = DB::table('really_long_table_name')
       ->get(array('really_long_table_name.field_very_long_name as short_name'));

물론 필드를 더 선택하려면 " "를 입력하고 다음을 추가하십시오.

 $users = DB::table('really_long_table_name')
       ->get(array('really_long_table_name.field_very_long_name as short_name', 'really_long_table_name.another_field as other', 'and_another'));

이것은 결합 복합 쿼리를 사용할 때 매우 실용적입니다.

나는 이 모든 옵션을 시도해 보았지만, 나에게 맞는 것은 아무것도 없다.그리고 라라벨 문서에서 정말 효과가 있는 것을 발견했습니다.

다음과 같이 시도해 볼 수 있습니다.

DB::table('table_one as t1')
    ->select(
        't1.field_id as id','t2.field_on_t2 as field'
     )->join('table_two as t2', function ($join) {
        $join->on('t1.field_id ', '=', 't2.field_id');
    })->get()

또한 DB 파사드를 사용할 때 테이블 방식의 두 번째 매개 변수로 에일리어스를 전달할 수 있습니다.

$users = DB::table('really_long_table_name', 'short_name')
           ->select('short_name.id')
           ->get();

이 기능은 특정 버전의 Larabel과 함께 제공되는 것인지, 아니면 항상 기본 제공되고 있는 것인지 알 수 없습니다.

소프트 삭제 오류 "Unknown column 'table_alias"에 대해서는 AMIB 응답과 동일합니다.deleted_at'), 추가만 하면 됩니다.->withTrashed() 직접 해 주세요.->whereRaw('items_alias.deleted_at IS NULL')

언급URL : https://stackoverflow.com/questions/17713730/how-to-alias-a-table-in-laravel-eloquent-queries-or-using-query-builder

반응형