Ayuda con error con Update con select
Publicado por José Maria (4 intervenciones) el 11/01/2019 12:37:13
Buenas amigos, llevo días con este maldito error y no consigo solucionarlo:
Tengo una tabla productos, con una tabla categoría que esta relacionada.
Clásica tabla de productos que lleva clave foranea Categoria_id.
Puestos en situación en el modelo de Productos tengo la relacion:
Las rutas:
El controlador de productos.
La vista editar, donde si me muestra el dato old, pero a la hora de actualizar me lanza el error por culpa del select.
Este es el erro al actualizar:
Trying to get property of non-object (View: C:\wamp64\www\Gañafote\resources\views\Productos\ListadoProductos.blade.php)
al actualizar lo que hace es que me pone el valor como null, no me pone ningún dato.
Estoy ya desesperado y seguro que es un detallito que no soy capaz de ver.
Gracias
Tengo una tabla productos, con una tabla categoría que esta relacionada.
Clásica tabla de productos que lleva clave foranea Categoria_id.
Puestos en situación en el modelo de Productos tengo la relacion:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Productos extends Model {
use sortable;
// asignamos la tabla
protected $table = 'productos';
//decimos que campos vamos a poder modicar desde el formulario
protected $fillable = ['Codigo','Categoria_id', 'Descripcion', 'PVP', 'Coste'];
protected $primaryKey = 'id';
//Añadimos los campos para hacer el sort
public $sortable = ['id','Codigo','Categoria_id', 'Descripcion', 'PVP', 'Coste'];
//Relación
public function categoria()
{
return $this->belongsTo('App\Categoria','Categoria_id');
}
Las rutas:
1
2
3
4
5
6
7
8
9
10
11
12
13
Route::get('/productos', 'ProductosController@show')->name('productos');
Route::get('/productos/nuevo','ProductosController@create')->name('crear_producto');
Route::post('productos/crear','ProductosController@store');
Route::get('/probando','ProductosController@lista')->name('listaProductos'); /*-------------------------->Esta es de prueba*/
Route::get('precios/{id}','ProductosController@getprecios'); /*-------------------------->Esta es de prueba*/
Route::get('productos/{id}/editar','ProductosController@edit')->name('editar_producto');
Route::put('productos/{id}','ProductosController@update')->name('actualizar_producto');
Route::get('productos/{id}/eliminar',[
'uses' =>'ProductosController@delete',
'as' =>'eliminar_producto'
]);
El controlador de productos.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public function edit ($id){
$producto = Productos::findOrFail($id);
$categorias = Categoria::all();
return view('Productos.Editarproducto', compact('producto','categorias'));
}
// ProductosRequest
public function update (Request $request,$id){
$producto = Productos::find($id);
// //almacenamos los datos
$producto->Categoria_id = $request->Categoria_id;
$producto->Codigo = $request->Codigo;
$producto->Descripcion = $request->Descripcion;
$producto->Categoria_id = $request->Categoria_id;
$producto->PVP = $request->PVP;
$producto->Coste = $request->Coste;
$producto->save();
return redirect::to('productos');
}
La vista editar, donde si me muestra el dato old, pero a la hora de actualizar me lanza el error por culpa del select.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
{!! Form::open(['route'=>['actualizar_producto',$producto], 'method'=>'PUT']) !!}
{{ csrf_field() }} {{-- añadimos un token que solo conoce nuestra aplicación, de forma que nos protejamos ante posibles ataques de terceros --}}
<div class="box-body">
<div class="form-group">
{{ Form::label('Codigo') }}
<input id="Codigo" type="text" class="form-control" name="Codigo" value="{{ old('Codigo',$producto->Codigo) }}" required autofocus>
</div>
<div class="form-group">
{{ Form::label('Descripción') }}
<input id="Descripcion" type="text" class="form-control" name="Descripcion" value="{{ old('Descripcion',$producto->Descripcion) }}" required autofocus>
</div>
<div class="form-group">
<select class="categoria" name="categoria" id="categoria" data-live-search="true">
@foreach ($categorias as $categoria)
<option
value="{{ $categoria->id }}"
@if ($categoria->id === $producto->Categoria_id)
selected
@endif
>{{ $categoria->Descripcion }}</option>
@endforeach
</select>
</div>
<div class="form-group">
{{ Form::label('PVP') }}
<div class="input-group">
<div class="input-group-addon">€</div>
<input id="PVP" type="number" class="form-control" step="any" name="PVP" value="{{ old('PVP',$producto->PVP) }}" required autofocus>
</div>
</div>
<div class="form-group">
{{ Form::label('Coste') }}
<div class="input-group">
<div class="input-group-addon">€</div>
<input id="Coste" type="number" class="form-control" step="any" name="Coste" value="{{ old('Coste',$producto->Coste) }}" required autofocus>
</div>
</div>
</div>
<div class="box-footer">
{{ Form::submit('Actualizar',['class'=>'btn btn-success']) }}
</div>
{{ Form::close() }}
Este es el erro al actualizar:
Trying to get property of non-object (View: C:\wamp64\www\Gañafote\resources\views\Productos\ListadoProductos.blade.php)
al actualizar lo que hace es que me pone el valor como null, no me pone ningún dato.
Estoy ya desesperado y seguro que es un detallito que no soy capaz de ver.
Gracias
Valora esta pregunta


0