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