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