Laravelのクエリビルダーを使用しているとしましょう。
$users = DB::table('really_long_table_name')
->select('really_long_table_name.id')
->get();
私はこのSQLに相当するものを探しています:
really_long_table_name AS short_name
これは、多くの選択と場所を入力する必要がある場合(または通常、選択の列エイリアスにもエイリアスを含める必要があり、結果配列で使用される場合)、特に役立ちます。テーブルエイリアスがないと、入力がずっと増え、すべてが読みにくくなります。 laravelドキュメントで答えが見つかりませんか?
Laravelは、AS
を使用してテーブルと列のエイリアスをサポートします。試して
$users = DB::table('really_long_table_name AS t')
->select('t.id AS uid')
->get();
すばらしいtinker
ツールを使用して実際に見てみましょう
$ php artisan tinker [1]> Schema :: create( 'really_long_table_name'、function($ table){$ table-> increments( 'id');}); // NULL [2]> DB :: table( 'really_long_table_name')-> insert(['id' => null]); // true [3]> DB :: table( 'really_long_table_name AS t')-> select( 't.id AS uid')-> get(); // array( // 0 => object(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 family_name', 'pf.id as family')
->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')
のように処理します。