Como Utilizar fillable Laravel

publicado por: Anonymous

tengo duda de que campos debo poner en fillable , Tengo entendido que Se produce una vulnerabilidad de asignación masiva cuando un usuario pasa un parámetro HTTP inesperado a través de una solicitud, y ese parámetro cambia una columna en su base de datos que no esperaba por lo cual ahí que poner el fillable cuales son los campos que vamos a permitir que se asignen en masa ,
mi pregunta es que nombre debo poner en fillable , los que les di a mis input o los nombres de mis campos en la base de datos.

por ejemeplo : yo tengo un <input type="text" class="form-control" name="Nombre_Pelicula">, pero en la base de datos se llama nombre_pelicula , entonces el el fillable deberia poner

protected $fillable = [‘Nombre_Pelicula’] o protected $fillable =
[‘nombre_pelicula’]

Funcion Update

public function update(Request $request,Pelicula $pelicula)
{

        $pelicula->fill($request->except('imagen_pelicula'));

        if ($request->hasFile('Imagen_Pelicula')) {
            $archivo = $request->file('Imagen_Pelicula');
            $Nombre_Imagen = time().$archivo->getClientOriginalName();
            $pelicula->imagen_pelicula = $Nombre_Imagen;
            $archivo->move(public_path().'/img/peliculas' , $Nombre_Imagen );   
        }  

        $pelicula->save();
        return redirect('peliculas');
    }

Formulario

 <br>
    <a class="btn btn-primary" href="{{ route('peliculas.index') }}"> Ver Peliculas  </a>
    <form style="width: 800px;border:0px red solid;margin:auto"  method="post" action="{{ asset('/peliculas') }}" enctype="multipart/form-data">
       <div class="form-row">
         <div class="form-group col-sm-12 col-md-6">
           <label for="Nombre_Pelicula">Nombre Pelicula</label>
           <input type="text" class="form-control" name="Nombre_Pelicula" id="Nombre_Pelicula" placeholder="Nombre Pelicula" >
         </div>
         <div class="form-group col-md-6">
           <label for="Director_Pelicula">Director</label>
           <input type="Director_Pelicula" class="form-control" name="Director_Pelicula" id="Director_Pelicula" placeholder="Director_Pelicula">
         </div>
         <div class="form-group col-md-6">
           <label for="Genero_Pelicula">Genero</label>
           <input type="Genero_Pelicula" class="form-control" name="Genero_Pelicula" id="Genero_Pelicula" placeholder="Genero_Pelicula">
         </div>
         <div class="form-group col-md-6">
            <label for="Idioma_Pelicula">Idioma</label>
            <input type="Idioma_Pelicula" class="form-control" name="Idioma_Pelicula" id="Idioma_Pelicula" placeholder="Idioma_Pelicula">
          </div>
          <div class="form-group col-md-6" >
            <div style="padding:0px" class="form-group col-md-12">
                <label for="Duracion_Pelicula">Duracion</label>
                <input type="Duracion_Pelicula" class="form-control" name="Duracion_Pelicula" id="Duracion_Pelicula" placeholder="Duracion_Pelicula">
            </div>
            <div style="padding:0px" class="form-group col-md-12">
                <label for="Año_Pelicula">Año</label>
                <input type="Año_Pelicula" class="form-control" name="Año_Pelicula" id="Año_Pelicula" placeholder="Año_Pelicula">
            </div>
            <div style="padding:0px" class="form-group col-md-12">
                <label for="Calidad_Pelicula">Calidad</label>
                <input type="Calidad_Pelicula" class="form-control" name="Calidad_Pelicula" id="Calidad_Pelicula" placeholder="Calidad_Pelicula">
            </div>
            <div style="padding:0px" class="form-group col-md-12">
                <label for="Precio_Pelicula">Precio</label>
                <input type="Precio_Pelicula" class="form-control" name="Precio_Pelicula" id="Precio_Pelicula" placeholder="Precio Pelicula">
            </div>
            <div style="padding:0px" class="form-group col-md-12">
                <label for="Imagen_Pelicula">Imagen Pelicula</label>
                <input type="file" class="form-control-file" name="Imagen_Pelicula" id="Imagen_Pelicula" >
           </div>
         </div>
         <div class="form-group col-6" >
          <label for="Descripcion_Pelicula">Descripcion</label>
          <textarea class="form-control" rows="15" name="Descripcion_Pelicula" id="Descripcion_Pelicula"  > </textarea>
        </div>

       </div>
       {{csrf_field()}}
       <button type="submit" class="btn btn-primary">Guardar</button>
     </form>
     <br> 

solución

Según la documentación oficial, debes poner el nombre del atributo (el cual no necesariamente el nombre del campo en la base de datos), o en este caso, y en su forma más simple, el nombre del campo en la base de datos.

protected $fillable = ['nombre_pelicula'];

¿Qué atributos deberías incluir en dicho array?

Aquellos que consideres sensibles y que no deberían modificarse o asignarse en cierta forma, el más típico es el id, el cual normalmente no se modifica ni se asigna de forma manual.

Por último, revisa también las propiedades $guarded y $hidden.

https://laravel.com/docs/5.7/eloquent#mass-assignment

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *