wherein query hacer consultas como column anidadas php laravel laravel-4 eloquent

php - hacer - laravel query builder table alias



Cómo alias una tabla en las consultas de Laravel Eloquent(o usando Query Builder)? (4)

Digamos que estamos usando el generador de consultas de Laravel:

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

Estoy buscando un equivalente a este SQL:

really_long_table_name AS short_name

Esto sería especialmente útil cuando tengo que escribir muchas selecciones y dónde (o, por lo general, incluyo el alias en el alias de la columna de la selección también, y se usa en la matriz de resultados). Sin ningún alias de tabla hay mucho más tipeo para mí y todo se vuelve mucho menos legible. ¿No puede encontrar la respuesta en los documentos de Laravel, alguna idea?


Aquí es cómo uno puede hacerlo. Daré un ejemplo al unirme para que quede muy claro para alguien.

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

Espero que esto ayude.


Igual que la respuesta AMIB, para el error de borrado suave "Columna desconocida ''table_alias.deleted_at''", simplemente agregue ->withTrashed() luego maneje usted mismo como ->whereRaw(''items_alias.deleted_at IS NULL'')


Laravel admite alias en tablas y columnas con AS . Tratar

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

Veámoslo en acción con una increíble herramienta de cambio

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


Para usar alias en modelos elocuentes, modifique su código de esta manera:

Item ::from( ''items as items_alias'' ) ->join( ''attachments as att'', DB::raw( ''att.item_id'' ), ''='', DB::raw( ''items_alias.id'' ) ) ->select( DB::raw( ''items_alias.*'' ) ) ->get();

Esto agregará automáticamente el prefijo de tabla a los nombres de tabla y devolverá una instancia de modelo de Items . no es un resultado de consulta simple. Agregar DB::raw impide que laravel agregue prefijos de tabla a los alias.