Quiero obtener todos los datos de la base de datos de repuesto usando la función all (), luego usar foreach a la vista para acceder a los datos, pero sigo recibiendo ese error. Funciona bien cuando uso el mismo método para otra hoja de vista.

Controlador

  public function LaporanSisaStok(Request $request) {

    if($request->kode == "")
    {
        $spareparts = Sparepart::all();
        return view('laporan/sisaStok')->with(['spareparts' => $spareparts]);
    }
    else {
        $query = DB::table("historisparepart")->select(DB::raw('EXTRACT(MONTH FROM tanggal) AS Bulan, SUM(jumlah) as Sisa'))
        ->where('kodeSparepart', $request->kode)
        ->groupBy(DB::raw('EXTRACT(MONTH FROM tanggal)'))
        ->get();
        return view('printPreview/sisaStok', ['data'=>$query]);
    }
}

Vista

<form method="POST" action="{{ route('laporan.sisaStok') }}" enctype="multipart/form-data">
@csrf
<div class="form-group-row">
    <label for="sparepart" class="col-sm-2 col-form-label">Sparepart</label>
    <select class="custom-select" id="kode" name="kode">
        <option value="">-Pilih Sparepart-</option>
        foreach($spareparts as $sparepart)
        {
            <option value="{{$sparepart->kodeSparepart}}"> {{$sparepart->namaSparepart}} </option>
        }
    </select>
</div>
<br>
<button type="submit" class="btn btn-info"><i class="oi oi-task"></i> Cari </button>

dd result

0
Ananda Pramono 11 may. 2019 a las 18:02

3 respuestas

La mejor respuesta

No estás recorriendo nada. Debe dar al método foreach() una variable de su colección de repuestos. Creo que podría ayudarte a evitar confusiones, para nombrar las variables de colección en plural:

En su controlador :

$spareparts = Sparepart::all();
return view('laporan/sisaStok', compact('spareparts'));

Entonces, lo más importante, debe decirle a foreach qué debe producir. En su vista , cambie:

foreach($sparepart)

Para

@foreach($spareparts as $sparepart)

No olvides que estás en blade, así que usa el @ antes del foreach. Luego, suponiendo que realmente tenga una propiedad en el modelo de repuestos llamada kodeSparepart, esto debería funcionar bien.

0
Watercayman 11 may. 2019 a las 21:48

Debe usar el plural de su nombre de dtb para recorrer los valores de modo que su variable 'repuesto' deba cambiar a 'repuestos'

$sparepart = Sparepart::all();
return view('laporan/sisaStok')->with(['spareparts' => $sparepart]);

En su vista, cambie su bucle a la nueva variable y use su variable actual para que su vista se vea así:

Vista

<div class="form-group-row">
    <label for="sparepart" class="col-sm-2 col-form-label">Sparepart</label>
    <select class="custom-select" id="kode" name="kode">
        <option value="">-Pilih Sparepart-</option>
        @foreach($spareparts as $sparepart)
        {
            <option value="{{$sparepart->kodeSparepart}}"> {{$sparepart->namaSparepart}} </option>
        }
        @endforeach

    </select>
</div>
0
Gustavo Jordan 12 may. 2019 a las 04:10

Esta no es una sintaxis de bucle en la vista laravel

  foreach($spareparts as $sparepart)
    {
        <option value="{{$sparepart->kodeSparepart}}"> {{$sparepart->namaSparepart}} </option>
    }

Debería ser así

@foreach($spareparts as $sparepart)
<option value="{{$sparepart->kodeSparepart}}"> {{$sparepart->namaSparepart}} </option>
 @endforeach

Y otro problema es que está pasando los datos de manera incorrecta. Debería ser así

  return view('printPreview/sisaStok', ['spareparts'=>$query]);
0
ashok poudel 11 may. 2019 a las 17:16