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();
이렇게 하면 테이블 이름에 테이블 접두사가 자동으로 추가되고 다음 인스턴스가 반환됩니다.Items
model. 완전 쿼리 결과가 아닙니다.추가 중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
'programing' 카테고리의 다른 글
vuejs의 데이터로 앱을 초기화하는 방법 (0) | 2022.10.21 |
---|---|
iframe에서 부모 창 함수 호출 (0) | 2022.10.21 |
내가 왜 템플리팅 엔진을 쓰겠어?jsp include 및 jstl vs 타일, 프리마커, 속도, 시트메쉬 (0) | 2022.10.21 |
계속하기 전에 하나의 기능이 완료될 때까지 기다리는 올바른 방법입니까? (0) | 2022.10.21 |
함수에 전역 변수 사용 (0) | 2022.10.21 |