relaciones muchos a muchos

This commit is contained in:
cmoreno 2026-10-06 19:34:43 -03:00
parent 2ac77a2af1
commit 4ed4a05488
5 changed files with 101 additions and 9 deletions

View File

@ -6,6 +6,7 @@ use Illuminate\Http\Request;
use App\Models\Producto;
use App\Models\Categorias;
use App\Models\CodigoBarras;
use App\Models\Etiquetas;
class ProductoController extends Controller
{
public function index(Request $request){
@ -28,11 +29,13 @@ class ProductoController extends Controller
public function create(){
$categorias= Categorias::get();
return view('productos.new',["categorias"=>$categorias]);
$etiquetas= Etiquetas::get();
return view('productos.new',["categorias"=>$categorias , "etiquetas" => $etiquetas]);
}
public function store(Request $request){
//return back()->withInput()->withErrors("El producto no se pudo guardar");
$codigo_barras= new CodigoBarras();
$codigo_barras->fill([
'codigo' => $request->input('codigo_barras'),
@ -48,13 +51,16 @@ class ProductoController extends Controller
'codigo_barras_id' => $codigo_barras->id_codigo_barras,
]);
$producto->save();
$producto->etiquetas()->attach($request->input('etiquetas'));
$request->session()->flash('mensaje-success', 'El producto fue agregado.');
return redirect('/productos');
}
public function edit($id){
$producto = Producto::findOrfail($id);
return view('productos.edit', ["prod"=>$producto]);
$producto = Producto::with('categorias','codigo_barras')->findOrfail($id);
$categorias= Categorias::get();
$etiquetas= Etiquetas::get();
return view('productos.edit', ["prod"=>$producto, "etiquetas"=>$etiquetas, "categorias"=>$categorias]);
}
public function update(Request $request, $id){

View File

@ -32,4 +32,14 @@ class Producto extends Model
return $this->belongsTo(CodigoBarras::class,'codigo_barras_id','id_codigo_barras');
}
public function etiquetas()
{
return $this->belongsToMany(
Etiquetas::class,
'productos_etiquetas',
'producto_id',
'etiqueta_id'
);
}
}

View File

@ -45,6 +45,26 @@
value="{{ old('precio', $prod->precio) }}" >
</div>
</div>
<div class="row">
<div class="col-md-8">
<label for="categoria" >Categoria (*)</label>
<select name="categoria" id="categoria" style="width:100%" required>
@foreach($categorias as $cat)
<option></option>
<option value="{{$cat->id_categoria}}"
{{old('categoria',$prod->categoria_id) == $cat->id_categoria ? 'selected': ''}}>
{{$cat->nombre}}</option>
@endforeach
</select>
</div>
<div class="form-group col-md-4">
<label for="nombre" class="form-check-label">Codigo Barras (*)</label>
<input type="text" name="codigo_barras" id="codigo_barras" value="{{ old('codigo_barras',$prod->codigo_barras->id_codigo_barras) }}" class="form-control">
</div>
</div>
<div class="row justify-content-center align-items-center">
@ -61,8 +81,20 @@
@endsection
@push('scripts')
<script>
</script>
@push('styles')
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css">
@endpush
@push('scripts')
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
<script>
$('#categoria').select2({
placeholder:"Seleccione un categoria"
});
$('#etiquetas').select2({
placeholder:"Seleccione Etiquetas"
});
</script>
@endpush

View File

@ -60,7 +60,25 @@
<input type="text" name="codigo_barras" id="codigo_barras" value="{{ old('codigo_barras') }}" class="form-control">
</div>
</div>
<div class="row">
<div class="col-md-5">
<label for="etiquetas"> Etiquetas</label>
<select name="etiquetas[]" id="etiquetas" style="width:100%" multiple required>
<option></option>
@foreach($etiquetas as $etiq)
<option value="{{$etiq->id_etiqueta}}"
{{in_array($etiq->id_etiqueta,old('etiquetas',[])) ? 'selected' : ''}}
>
{{$etiq->nombre}}
@endforeach
</select>
</div>
</div>
</br>
@ -88,5 +106,10 @@
$('#categoria').select2({
placeholder:"Seleccione un categoria"
});
$('#etiquetas').select2({
placeholder:"Seleccionar etiquetas"
});
</script>
@endpush

View File

@ -35,6 +35,14 @@
</div>
</div>
<div class="row">
<div class="col-md-5">
<label for="etiquetas"> Etiquetas</label>
</div>
</div>
<legend></legend>
<div class="row justify-content-center align-items-center">
@ -43,4 +51,17 @@
</div>
</div>
@endsection
@endsection
@push('styles')
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css">
@endpush
@push('scripts')
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
<script>
$('#etiquetas').select2({
placeholder:"Seleccione Etiquetas"
});
</script>
@endpush