179

Laravel のクエリビルダーを使用しているとしましょう:

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

私はこのSQLに相当するものを探しています:

really_long_table_name AS short_name

これは、多くの選択と場所を入力する必要がある場合に特に役立ちます (または、通常、選択の列エイリアスにもエイリアスを含め、結果配列で使用されます)。テーブルのエイリアスがないと、タイピングが多くなり、すべてが読みにくくなります。laravel のドキュメントで答えが見つからない場合、何かアイデアはありますか?

4

8 に答える 8

263

Laravel は、テーブルとカラムのエイリアスをサポートしていますAS。試す

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

tinker素晴らしいツールを使って動作を見てみましょう

$ php 職人いじり
[1] > Schema::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 => object(stdClass)(
// 'uid' => '1'
// )
// )
于 2013-07-18T03:15:25.280 に答える
105

雄弁なモデルでエイリアスを使用するには、コードを次のように変更します。

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 がテーブル プレフィックスをエイリアスに追加できなくなります。

于 2015-07-25T07:50:08.640 に答える