Tengo 2 tablas unidas en Eloquent, a saber, temas y usuarios.
modelo de tema:
public function user() {
return $this->belongs_to('User');
}
modelo de usuario:
public function themes() {
return $this->has_many('Theme');
}
Mi llamada a la API de Eloquent se ve a continuación:
return Response::eloquent(Theme::with('user')->get());
Lo que devuelve todas las columnas del tema (está bien) y todas las columnas del usuario (no está bien). Solo necesito la columna 'nombre de usuario' del modelo de usuario, ¿cómo puedo limitar la consulta a eso?
Response
qué tipo de clase necesito importar?Respuestas:
Cambie su modelo para especificar qué columnas desea seleccionar:
Y no olvide incluir la columna a la que se une.
fuente
Para Laravel> = 5.2
Utilice el método -> pluck ()
Para Laravel <= 5.1
Utilice el método -> lists ()
fuente
Puede proporcionar una matriz de campos en el parámetro get de la siguiente manera:
ACTUALIZAR (para Laravel 5.2) Desde los documentos , puede hacer esto:
fuente
SQLSTATE[42S22]: Column not found
y su SQL no incluye la tabla enwith
. El sql que aparece en el error es "SELECT fk_table.column1 FROM main_table".Lo sé, pides Eloquent pero puedes hacerlo con Fluent Query Builder
fuente
Asi es como lo hago
La primera respuesta del usuario 2317976 no funcionó para mí, estoy usando laravel 5.1
fuente
pivot
a $ matriz oculta del modelo de publicaciónprotected $hidden = ['pivot']
Otra opción es hacer uso de la
$hidden
propiedad del modelo para ocultar las columnas que no desea mostrar. Puede definir esta propiedad sobre la marcha o establecer valores predeterminados en su modelo.Ahora, la contraseña de los usuarios se ocultará cuando devuelva la respuesta JSON.
También puede configurarlo sobre la marcha de manera similar.
fuente
static
.Usar con paginación
fuente
user2317976 ha introducido una excelente forma estática de seleccionar columnas de tablas relacionadas.
Aquí hay un truco dinámico que encontré para que pueda obtener lo que quiera cuando use el modelo:
Encontré que este truco también funciona bien con load (). Esto es muy conveniente.
Asegúrese de incluir también la clave de la tabla de destino, de lo contrario, no podrá encontrarla.
fuente
De esta manera:
fuente
Sé que esta es una pregunta antigua, pero si está creando una API, como lo hace el autor de la pregunta, use transformadores de salida para realizar tales tareas.
Transofrmer es una capa entre el resultado real de la consulta de la base de datos y un controlador. Permite controlar y modificar fácilmente lo que se enviará a un usuario o consumidor de API.
Recomiendo Fractal como una base sólida de su capa de transformación de salida. Puedes leer la documentación aquí .
fuente
En Laravel 4, puede ocultar ciertos campos para que no se devuelvan agregando lo siguiente en su modelo.
http://laravel.com/docs/eloquent#converting-to-arrays-or-json
fuente
En Laravel 5.5, la forma más limpia de hacer esto es:
Agrega dos puntos y los campos que desea seleccionar separados por una coma y sin un espacio entre ellos.
fuente
Usando el modelo:
Usando Query Builder:
fuente
Si entendí bien esto, lo que se devuelve está bien, excepto que solo desea ver una columna. Si es así, esto a continuación debería ser mucho más simple:
fuente
Echa un vistazo, http://laravel.com/docs/database/eloquent#to-array
Debería poder definir qué columnas no desea que se muestren en su api.
fuente