Saltar al contenido

Cómo excluir ciertas columnas mientras se usa elocuente

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, agey 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *