Как псевдоним таблицы в Laravel Eloquent (или с помощью Query Builder)?

Допустим, мы используем построитель запросов Laravel:

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

Я ищу эквивалент этого SQL:

 really_long_table_name AS short_name 

Это было бы особенно полезно, когда я должен был бы набрать много выборок и wheres (или, как правило, я включаю псевдоним в псевдоним столбца в select, а также get, который используется в массиве результатов). Без каких-либо псевдонимов таблиц для меня гораздо больше печатаются, и все становится намного менее читаемым. Не можете найти ответ в документах 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');});
 // НОЛЬ
 [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.joined_col' ), '=', DB::raw( 'items_alias.id' ) ) ->select( DB::raw( 'items_alias.*' ) ) ->get(); 

Это автоматически добавит префикс таблицы к именам таблиц и вернет экземпляр модели Items . а не голый результат запроса. Добавление DB::raw предотвращает добавление префиксов таблиц в псевдонимы larvel.

То же, что и ответ AMIB, для ошибки мягкого удаления «Неизвестный столбец« table_alias.deleted_at », просто добавьте -> withTrashed (), тогда обработайте его самостоятельно, как« -> whereRaw ('items_alias.deleted_at IS NULL') "

Вот как это можно сделать. Я приведу пример с присоединением, чтобы кто-то стал очень понятен.

 $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(); 

Надеюсь это поможет.