Esta crónica fue analizado por expertos así garantizamos la exactitud de nuestra esta sección.
Solución:
Si solo necesitas esconderte attributes de tu modelo array o representación JSON, puede agregar el $hidden
propiedad a su modelo o utilice el makeHidden
función, vea otras respuestas para más detalles. Pero a veces no desea cargar grandes cantidades de datos (geoespaciales, html, registros…) en su aplicación, será lento y requerirá más memoria. OP solicitó una consulta SQL, de ahí mi respuesta, pero la mayoría de las veces es más conveniente ocultar solo los datos de la respuesta JSON.
AFAIK no hay una opción de compilación en SQL para excluir columnas explícitamente, por lo que Laravel no puede hacerlo. Pero puedes probar este truco.
Actualizar
Otro truco es especificar todas las columnas en su modelo y agregar una función de alcance local
protected $columns = ['id','pseudo','email']; // add all columns from you table
public function scopeExclude($query, $value = [])
return $query->select(array_diff($this->columns, (array) $value));
Entonces puedes hacer:
$users = User::where('gender', 'M')
->where('is_active', 1)
->exclude(['pseudo', 'email', 'age', 'created_at'])
->toArray();
usando hidden
array en el modelo es bueno, pero si no quiere ocultar su columna todo el tiempo y usar makeVisible
para acceder a ellos en necesidad, en su lugar, oculte su columna de la serialización donde lo necesita con makeHidden
funcionar así:
$res = Model::where('your query')->get();
$res->makeHidden(['column_one','column_two','column_n']);
return response()->json($res);
No sé acerca de la versión anterior de Laravel, pero en 5.4 puedes poner esta línea en el modelo de Usuario
protected $hidden = ['pseudo', 'email', 'age', 'created_at'];
y entonces User::find(1);
devolverá todos los campos excepto pseudo
, email
, age
y created_at
.
Pero aún puede recuperar esos campos ocultos usando:
$user = User::find(1);
$email = $user['email']; // or $user->email;
Eres capaz de auxiliar nuestra tarea exponiendo un comentario y puntuándolo te damos la bienvenida.