This time I come for your help on another topic.
I'm doing a form in Laravel 5.5, to enter a list of servers in a table, This table has many foreign keys.
This is the structure of the table:
<?php $title = isset($item) ? $item->name: "Agregar nuevo Servidor" ?>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
{!! Form::myInput('text', 'hostname', 'Hostname', ['required']) !!}
{!! Form::myInput('text', 'ip', 'IP', ['required']) !!}
{!! Form::myInput('text', 'cpu', 'CPU', ['required']) !!}
{!! Form::myInput('text', 'cores', 'Cores', ['required']) !!}
{!! Form::myInput('text', 'ram', 'Ram (MB)', ['required']) !!}
{!! Form::myInput('text', 'disco', 'Disco (GB)', ['required']) !!}
{!! Form::mySelect('id_rol', 'Rol', App\Roles::pluck('nombre', 'id')->toArray(), null, ['class'=>'chosen', 'placeholder' => 'Escoge una opción']) !!}
<div class="row">
<div class="col-sm-12">
<div class="box" style="border:1px solid #d2d6de;">
<div class="box-body" style="margin:10px;">
<label class="col-sm-5" for="nombre">Sistema operativo</label>
<br>
<select name="so" id="so" style="width: 100%">
<option value="">Seleccionar sistema</option>
@foreach($sistemas as $sistema)
<option value="{{ $sistema->id }}">{{ $sistema->nombre }}</option>
@endforeach
</select>
<br>
<br>
<label class="col-sm-5" for="nombre">Version Sistema operativo</label>
<br>
<select name="version" id="version" style="width: 100%">
<option value="">Selecciona un sistema operativo primero</option>
</select>
<br>
</div>
</div>
</div>
</div>
<script>
var rutaConsulta = "{{ route('admin.ruta.consulta.so') }}";
$(document).ready(function(){
selectChange();
});
function selectChange(){
$('#so').on('change', function(e){
var idSo = $(this).val();
ajaxSelect(idSo);
});
}
function ajaxSelect(id)
{
$.ajax({
type: 'POST',
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
url: rutaConsulta,
data: {id: id},
dataType: 'json',
beforeSend: function(){
}
}).done(function(response) {
var html = '<option value="">Selecciona una opción</option>';
$.each(response.versiones, function(i, elem){
html += '<option value="'+ elem.id +'">'+ elem.version +'</option>'
});
$('#version').html(html);
}).fail(function(data) {
});
}
</script>
{!! Form::mySelect('id_tipo', 'Tipo', App\Tipos::pluck('nombre', 'id')->toArray(), null, ['required','class'=>'chosen', 'placeholder' => 'Escoge una opción']) !!}
{!! Form::mySelect('id_uso', 'Uso', App\Usos::pluck('nombre', 'id')->toArray(), null, ['required','id' => 'listaUsos', 'class'=>'chosen', 'placeholder' => 'Escoge una opción']) !!}
<div class="requerido-con-virtual">
<div class="row">
<div class="col-sm-12">
<div class="box" style="border:1px solid #d2d6de;">
<div class="box-body" style="margin:10px;">
{!! Form::mySelect('id_padre',
'Servidor padre:',
App\Servidores::select(DB::raw("ip AS ip"), "id")->where('id_uso', '=', 1)-> pluck('ip', 'id')->toArray(),
null,
['class'=>'requerido-con-virtual', 'style' => 'width: 100%;', 'placeholder' => 'Escoge una opción']) !!}
</div>
</div>
</div>
</div>
</div>
<!-- MARCA Y MODELO -->
<div class="requerido-con-fisico">
<div class="row">
<div class="col-sm-12">
<div class="box" style="border:1px solid #d2d6de;">
<div class="box-body" style="margin:10px;">
<div class="row">
<div class="col-sm-12">
<div class="box" style="border:1px solid #d2d6de;">
<div class="box-body" style="margin:10px;">
<label class="col-sm-5" for="nombre">Marca</label>
<br>
<select name="marca" id="marca" style="width: 100%">
<option value="">Seleccionar marca</option>
@foreach($marcas as $marca)
<option value="{{ $marca->id }}">{{ $marca->nombre }}</option>
@endforeach
</select>
<br>
<br>
<label class="col-sm-5" for="modelo">Modelo</label>
<select name="modelo" id="modelo" style="width: 100%">
<option value="">Selecciona un modelo primero</option>
</select>
<br>
</div>
</div>
</div>
</div>
<script>
var rutaConsulta2 = "{{ route('admin.ruta.consulta.mod') }}";
$(document).ready(function(){
selectChange2();
});
function selectChange2(){
$('#marca').on('change', function(e){
var idMarca = $(this).val();
ajaxSelect1(idMarca);
});
}
function ajaxSelect1(id){
$.ajax({
type: 'POST',
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
} ,
url: rutaConsulta2,
data: {id: id},
dataType: 'json',
beforeSend: function(){
}
}).done(function(response) {
var html = '<option value="">Selecciona una opción</option>';
$.each(response.modelos, function(i, elem){
html += '<option value="'+ elem.id +'">'+ elem.modelo +'</option>'
});
$('#modelo').html(html);
}).fail(function(data) {
});
}
</script>
{!! Form::myInput('text', 'mac', 'Mac', ['class' => 'requerido-con-fisico', 'style' => 'width: 100%;']) !!}
{!! Form::myInput('text', 'serial', 'Serial', ['class' => 'requerido-con-fisico', 'style' => 'width: 100%;']) !!}
{!! Form::myInput('text', 'ubicacion', 'Ubicación', ['class' => 'requerido-con-fisico', 'style' => 'width: 100%;']) !!}
{!! Form::myInput('text', 'propietario', 'Propietario', ['class' => 'requerido-con-fisico', 'style' => 'width: 100%;']) !!}
</div>
</div>
</div>
</div>
</div>
{!! Form::mySelect('id_estado', 'Estado', App\Estados::pluck('nombre', 'id')->toArray(), null, ['class'=>'chosen', 'placeholder' => 'Escoge una opción']) !!}
{!! Form::myInput('text', 'observacion', 'Observacion', ['required']) !!}
This is my model
class Servidores extends Model
{
protected $fillable = ['hostname','ip','cpu','cores','ram','disco','id_padre','id_rol','id_so','id_version','id_tipo','id_uso','id_marca','id_modelo','mac','serial','ubicacion','propietario','id_estado','observacion'];
/*
|------------------------------------------------------------------------------------
| Relations
|------------------------------------------------------------------------------------
*/
public function parentServidores()
{
return $this->belongsTo(Servidores::class);
}
public function servidores2()
{
return $this->belongsTo('App\Servidores','id_padre');
}
public function roles()
{
return $this->belongsTo('App\Roles','id_rol');
}
public function usos()
{
return $this->belongsTo('App\Usos','id_uso');
}
public function so()
{
return $this->belongsTo('App\SistemasOperativos','id_so');
}
public function versionn()
{
return $this->belongsTo('App\SoVersiones','id_version');
}
public function tipos()
{
return $this->belongsTo('App\Tipos','id_tipo');
}
public function estados()
{
return $this->belongsTo('App\Estados','id_estado');
}
public function marcas()
{
return $this->belongsTo('App\Marcas','id_marca');
}
public function modelos()
{
return $this->belongsTo('App\Modelos','id_modelo');
}
}
This is my driver
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use Illuminate\Http\JsonResponse;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Servidores;
use App\Roles;
use App\SistemasOperativos;
use App\SoVersiones;
use App\Tipos;
use App\Marcas;
use App\Modelos;
use App\Estados;
class ServidoresController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$items = Servidores::with('parentServidores','servidores2','roles','so','versionn','marcas','modelos','tipos','estados','usos')->get();
return view('admin.servidoresVistas.index', compact('items'));
}
public function consultarVersiones(Request $request)
{
$id_so = $request->id;
$versiones = SoVersiones::where('id_so', $id_so)->get();
$respuesta = array();
$respuesta['versiones'] = $versiones->toArray();
return response()->json($respuesta);
}
public function consultarModelos(Request $request)
{
$id_marca = $request->id;
$modelos = Modelos::where('id_marca', $id_marca)->get();
$respuesta = array();
$respuesta['modelos'] = $modelos->toArray();
return response()->json($respuesta);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
$sistemas = SistemasOperativos::orderBy('nombre','asc')->get();
$marcas = Marcas::orderBy('nombre','asc')->get();
return view ('admin.servidoresVistas.create', compact('sistemas','marcas'));
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
Servidores::create($request->all());
//return back()->withSuccess(trans('app.success_store'));
return redirect()->route(ADMIN.'.servidoresRoute.index')->withSuccess(trans('app.success_store'));
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$item = Servidores::findOrFail($id);
return view('admin.servidoresVistas.edit', compact('item'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$item = Servidores::findOrFail($id);
$item->update($request->all());
//return back()->withSuccess(trans('app.success_update'));
return redirect()->route(ADMIN.'.servidoresRoute.index')->withSuccess(trans('app.success_update'));
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
Servidores::destroy($id);
return back()->withSuccess(trans('app.success_destroy'));
}
}
And these are my routes:
<?php
Route::get('/', function () {
return view('home');
});
Route::get('login', function () {
return view('auth.login');
});
Auth::routes();
Route::get('logout', 'Auth\LoginController@logout');
/*
|------------------------------------------------------------------------------------
| Admin
|------------------------------------------------------------------------------------
*/
Route::group(['prefix' => ADMIN, 'as' => ADMIN . '.', 'middleware'=>['auth']], function() {
Route::get('/', ['uses'=>'DashboardController@index', 'as'=>'dash']);
Route::get('selectso','ServidoresController@getso');
Route::post('selectversionRoute', 'ServidoresController@consultarVersiones')->name('ruta.consulta.so');
Route::post('selectmodeloRoute', 'ServidoresController@consultarModelos')->name('ruta.consulta.mod');
Route::get('selectmodeloRoute', 'ServidoresController@consultarModelos')->name('ruta.consulta.mod');
Route::get('selectversionRoute', 'ServidoresController@consultarVersiones')->name('ruta.consulta.so');
Route::resource('rolesRoute', 'RolesController');
Route::resource('sisopRoute', 'SisopController');
Route::resource('tipoRoute', 'TipoController');
Route::resource('estadosRoute', 'EstadosController');
Route::resource('usosRoute', 'UsosController');
Route::resource('serviciosRoute', 'ServiciosController');
Route::resource('servidoresRoute', 'ServidoresController');
Route::resource('instanciasRoute', 'InstanciasController');
Route::resource('ixsRoute', 'IxsController');
Route::resource('clientesRoute', 'ClientesController');
Route::resource('ixclientesRoute', 'IxclientesController');
Route::resource('soversionesRoute', 'SoversionesController');
Route::resource('marcasRoute', 'MarcasController');
Route::resource('modelosRoute', 'ModelosController');
Route::resource('categories', 'CategoriesController');
Route::resource('users', 'UsersController')->middleware('Role:Superadmin|Admin');
Route::get('profileedit/{id}', 'ProfileController@edit');
Route::put('profileupdate/{id}', 'ProfileController@update');
});
Having explained my code, I explain how my error occurs:
I have a table called a server, and this is the form I use to make that income:
When I make that entry, this error occurs:
I have read something about this problem on the internet and it is a topic of routes, but the problem that I initially identify is that when I make that entry, I do not take the data that I select from the operating system, the version or the model or the server mark, despite having taken them.
I'm sorry if the subject is a long one, I would be grateful if someone could help me.
I remain attentive.
Analyzing a little more the problem, I find that I have two punctual lios:
<div class="row">
<div class="col-sm-12">
<div class="box" style="border:1px solid #d2d6de;">
<div class="box-body" style="margin:10px;">
<label class="col-sm-5" for="nombre">Sistema operativo</label>
<br>
<select name="so" id="so" style="width: 100%">
<option value="">Seleccionar sistema</option>
@foreach($sistemas as $sistema)
<option value="{{ $sistema->id }}">{{ $sistema->nombre }}</option>
@endforeach
</select>
<br>
<br>
<label class="col-sm-5" for="nombre">Version Sistema operativo</label>
<br>
<select name="version" id="version" style="width: 100%">
<option value="">Selecciona un sistema operativo primero</option>
</select>
<br>
</div>
</div>
</div
These fields do not write anything to me on my servers table, and, when I try to edit a field from the page, it does not leave me, so it must be that at the time of doing the get, it does not bring me anything.
How could I fix it to take that data ...
Thanks for reading
Update 3.0:
I already managed to keep the fields in my table, the problem now, it is still with the routes, When I give it to save, it dies, despite having changed its name.