Search code examples
phplaravellaravel-4eloquent

How to alias a table in Laravel Eloquent queries (or using Query Builder)?


Lets say we are using Laravel's query builder:

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

I'm looking for an equivalent to this SQL:

really_long_table_name AS short_name

This would be especially helpful when I have to type a lot of selects and wheres (or typically I include the alias in the column alias of the select as well, and it gets used in the result array). Without any table aliases there is a lot more typing for me and everything becomes a lot less readable. Can't find the answer in the laravel docs, any ideas?


Solution

  • Laravel supports aliases on tables and columns with AS. Try

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

    Let's see it in action with an awesome tinker tool

    $ 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'
    //   )
    // )