[php] Laravel Eloquent 쿼리에서 테이블 별칭을 지정하는 방법 (또는 Query Builder 사용)은 무엇입니까?
라 라벨의 쿼리 빌더를 사용한다고 가정 해 봅시다 :
$users = DB::table('really_long_table_name')
->select('really_long_table_name.id')
->get();
이 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', function ($ 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
모델 인스턴스가 반환 됩니다. 베어 쿼리 결과가 아닙니다. 추가 DB::raw
하면 laravel이 별칭에 테이블 접두사를 추가 하지 못합니다.
답변
어떻게 할 수 있습니까? 나는 누군가에게 분명해 지도록 가입하는 예를 보여줄 것이다.
$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();
도움이 되었기를 바랍니다.
답변
Eloquent에서 사용합니다. 모델 위에 추가
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'));
복잡한 조인 쿼리를 사용할 때 매우 실용적입니다.
답변
AMIB 답변과 동일합니다. 소프트 삭제 오류 “알 수없는 열 ‘table_alias.deleted_at'”에 대해 추가 ->withTrashed()
한 다음 직접 처리하십시오.->whereRaw('items_alias.deleted_at IS NULL')