Допустим, мы используем построитель запросов 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();
Надеюсь это поможет.