Insert data in form with foreign key laravel

-1

I need help, I have problems to create a new record or update it, from a form, since I use foreign keys to do it. The error is

"Undefined variable: marcas (View: C:\xampp\htdocs\.....

these are my scripts

Models

class Marca extends Model
{
    protected $table = 'marcas';
    protected $fillable = [
        'nombre',
    ];

} 

class Vehiculo extends Model
{
        protected $table = 'vehiculos';
        protected $fillable = [
            'matricula', 'marca', 'modelo', 'capacidad_carga', 'año_fabricacion', 'color', 'estado',
        ];
    ......
    public function relMarca()
            {   
                return $this->BelongsTo('Marca');


            }

    } 

Route

Route::post('nuevo/{id?}', 'VehiculoController@agregar_nuevo_vehiculo');

Controller

Function to create

use Illuminate\Support\Facades\Request;
use App\Vehiculo;
use App\Marca;
...

public function agregar_nuevo_vehiculo()
    {
        $marcas=Marca();
        $data = Request::all();

       $vehiculo=new Vehiculo;
       $vehiculo->matricula=$data['matricula'];   
       $vehiculo->marca=$data['$marcas'];
       $vehiculo->modelo=$data['modelo'];
       $vehiculo->capacidad_carga=$data['capacidad_carga'];
       $vehiculo->año_fabricacion=$data['año_fabricacion'];
       $vehiculo->color=$data['color'];
       $vehiculo->estado=$data['estado'];

       $resul = $vehiculo->save();
       if ($resul){

           return view ('mensajes.msj_correcto')->with('msj','Nuevo vehiculo incorporado exitosamente');
       }
       else
           return view ('mensajes.msj_rechazado')->with('msj','Hubo un error en al creacion del vehiculo, vuelva a intentarlo, por favor');

    }

form

                 <<form  id="f_nuevo_vehiculo"  method="post"  action="agregar_nuevo_vehiculo" class="form-horizontal form_entrada" > {{ csrf_field() }}               
                        <input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">              

                    <div id="f_nuevo_vehiculo"class="box-body col-xs-12">
                        <div  class="row col-xs-12">
                            <div class="form-group col-xs-4">
                                  <label id="modal_elem" for="matricula">Matricula</label>
                                  <input id="modal_elem" type="text" class="form-control" id="matricula" name="matricula" p required placeholder="Introducir matricula" >
                            </div>


                            <div  class="form-group col-xs-4">
                            <label id="modal_elem" for="marca">Marca</label>

                                <select id="marca" name="marca" class="form-control">

                                @foreach($marcas as $mark)
                <option value="$mark->marcas->id"> {{'$mark->marcas->nombre' }} </option>
 @endforeach  

                                </select>

                            </div>

                            <div  class="form-group col-xs-4">
                                  <label id="modal_elem" for="modelo">Modelo</label>
                                  <input id="modal_elem" type="text" class="form-control" id="modelo" name="modelo" placeholder="Introducir modelo" >
                            </div>

                        </div>

                        <div class=row col-xs-12>
                            <div  class="form-group col-xs-4">
                                <label id="modal_elem" for="capacidad_carga">Capacidad</label>
                                <input id="modal_elem" type="number" class="form-control" id="capacidad_carga" name="capacidad_carga" placeholder="Capacidad Tons" >
                            </div>

                            <div  class="form-group col-xs-4">
                                <label id="modal_elem" for="año_fabricacion">Año de Fabricación</label>
                                <input id="modal_elem" type="date" class="form-control" id="año_fabricacion" name="año_fabricacion"  placeholder="Seleccionar" >
                            </div>

                            <div  class="form-group col-xs-4">
                                <label id="modal_elem" for="color">Color</label>
                                <input id="modal_elem" type="text" class="form-control" id="color" name="color" placeholder="Introducir color" >


                            </div>
                        <div class=row col-xs-12>
                            <div  class="form-group col-xs-4">
                                <label id="modal_elem" for="estado">Estado</label>
                                <select id="estado" name="estado" class="form-control">

                               <option value="1">Disponible</option>
                               <option value="2">En mantenimiento</option>
                                <option value="3">No disponible</option>

                                  </select>

                            </div>
                        </div>


                         </div>

                            <div class="box-footer col-xs-12 ">
                                        <button type="submit" class="btn btn-primary">Guardar</button>
                            </div>




                     </div>



              </div>

               <div class="modal-footer">
                <button type="button" class="btn btn-outline pull-left" data-dismiss="modal">Close</button>
                <button type="button" class="btn btn-outline">Save changes</button>

               </div>

               </div> 
           </form>
    
asked by FGB 12.05.2018 в 15:31
source

1 answer

1

There are a few things:

1.
a - Assuming that you are sending something like:

public function create()
{
    return view('formulario')->with('marcas', Marca::all());
} 

b - The loop of the marks should be something like this

<select id="marca" name="marca" class="form-control">
    @foreach($marcas as $mark)
        <option value="$mark->id"> {{'$mark->nombre' }} </option>
    @endforeach  
</select>

2. In the Path delete the /{id?} while the question mark makes the optional parameter the truth does not make sense if you are creating a resource.
I also think that your route should be a bit more descriptive because "new" does not say much.
You could place the route within a group.

Route::prefix('vehiculo')->group(function () {
    // vehiculo/nuevo
    Route::post('nuevo', 'VehiculoController@agregar_nuevo_vehiculo');
});

3. table vehiculos : change column marca by marca_id

In the migration, change the marca column to:

$table->unsignedInteger('marca_id');
$table->foreign('marca_id')->references('id')->on('marcas');

The model would fit you:

class Vehiculo extends Model
{
    protected $table = 'vehiculos';
    protected $fillable = [
        'matricula', 'marca_id', 'modelo', 'capacidad_carga', 'año_fabricacion', 'color', 'estado',
    ];

    public function marca()
    {   
        return $this->BelongsTo('Marca');
    }
} 

4. The form changes from <select id="marca" name="marca" class="form-control">
to
<select id="marca_id" name="marca_id" class="form-control">

5. Now in the agregar_nuevo_vehiculo() method you could do:

public function agregar_nuevo_vehiculo()
{
   $resul = Vehiculo::create(request()->all());
   if ($resul){
       return view ('mensajes.msj_correcto')->with('msj','Nuevo vehiculo incorporado exitosamente');
   }
   else
       return view ('mensajes.msj_rechazado')->with('msj','Hubo un error en al creacion del vehiculo, vuelva a intentarlo, por favor');

}

I hope my explanation will be of help.

    
answered by 12.05.2018 / 17:17
source