Предположим, что мы используем построитель запросов 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, и он будет использоваться в массиве результатов). Без каких-либо псевдонимов таблиц для меня гораздо больше печатаются, и все становится намного менее читаемым. Не можете найти ответ в документах 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');}); // 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' // ) // )
Чтобы использовать псевдонимы на красноречивых моделях, измените свой код следующим образом:
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
запрещает laravel добавлять префиксы таблиц к псевдонимам.
Unknown column 'table_alias.deleted_at'
Вот как это можно сделать. Я приведу пример с присоединением, чтобы кому-то стало ясно.
$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();
Надеюсь, что это поможет.
То же, что и ответ AMIB, для ошибки мягкого удаления "Неизвестный столбец" table_alias.deleted_at ", просто добавьте → withTrashed(), затем обработайте его самостоятельно, как" → whereRaw ( "items_alias.deleted_at IS NULL" ) "