unir una seleccionar personalizadas multitabla datos consultas consulta campo buscar anidadas mysql laravel fluent

mysql - una - Consultas fluidas de Laravel: ¿Cómo realizo un ''SELECCIONAR'' usando Fluent?



seleccionar un campo laravel (3)

Soy bastante nuevo en las consultas de Laravel y Fluent. Tengo una consulta para seleccionar todas las filas de la tabla de contratación y mostrarlas en orden aleatorio.

DB::table(''hire_bikes'')->order_by(/DB::raw(''RAND()''))->get();

Ahora quiero ser capaz de poner

concat(SUBSTRING_INDEX(description, " ",25),"...") AS description

en la parte SELECCIONAR de la consulta, de modo que pueda seleccionar * de la tabla y una descripción abreviada.

Sé que esto es posible ejecutando una consulta sin procesar, pero esperaba poder hacer esto con Fluent o Fluent al menos parcial (como en el ejemplo anterior).

Alguna ayuda o ideas?

Gracias Adam.


Puede hacer esto agregando un DB::raw() a una matriz de selección en su consulta fluida. Probé esto localmente y funciona bien.

DB::table(''hire_bikes'') ->select( array( ''title'', ''url'', ''image'', DB::raw(''concat(SUBSTRING_INDEX(description, " ",25),"...") AS description''), ''category'' ) ) ->order_by(/DB::raw(''RAND()'')) ->get();


Puede usar select AS sin usar DB::raw() . Simplemente ingrese una matriz en el método select() forma:

$event = Events::select([''name AS title'', ''description AS content''])->first(); // Or just pass multiple params $event = Events::select(''name AS title'', ''description AS Content''); $event->title; $event->content;

Probado justo ahora.

EDITAR:

Además, sugeriría que no se use una consulta DB:raw() para realizar un concat de su campo de descripción. Si está usando un modelo elocuente, puede usar accesadores y mutators para que lo haga por usted, así que si alguna vez necesita una descripción limitada, simplemente puede mostrarlo en su vista y no tener que usar la misma consulta cada vez para obtener un límite. descripción. Por ejemplo:

class Book extends Eloquent { public function getLimitedDescriptionAttribute() { return str_limit($this->attributes[''description''], $limit = 100, $end = ''...''); } }

En su opinión:

@foreach($books as $book) {{ $book->limited_description }} @endforeach

Ejemplo de salida (no es preciso limitarlo):

The description of this book is...

EDIT # 2:

También desaconsejaría usar la fachada de DB porque siempre utiliza su conexión predeterminada. Si está consultando una conexión secundaria, no tendrá esto en cuenta a menos que la especifique de forma activa mediante:

DB::connection(''secondary'')->table(''hire_bikes'')->select([''name as title''])->get();


select(array(DB::raw(''latitude as lat''), DB::raw(''longitude as lon'')))