[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')


답변