Perulangan $request ++

for ($e=1; $e<=10; $e++)
    {
      $edd = Setting::where('id', '=', $e)->update([
          'nama'=>$request->nama1,
          'isi' =>$request->isi1,
        ]);
    }

bagaimana caranya membuat sintak yang simple agar ketika terjadi perulangan, maka nama1 dan isi1 juga ikut berubah menjadi nama2 isi2, nama3, isi3, sampai ... nama10, isi10.

mohon bantuannya master sekalian. Terima Kasih.

avatar mading
@mading

11 Kontribusi 4 Poin

Diperbarui 1 tahun yang lalu

2 Jawaban:

Saya coba bantu dengan asumsi sebagai berikut: 1. Jumlah row di database agan seperti yang agan sebutkan, row 1 - 10 atau lebih. Saya mengabaikan error yang mungkin saja akan terjadi bila ternyata ada row yang hilang/didelete dari row 1 - 10 (misalnya row 5/id 5 telah didelete). karena jelas ini akan mengakibatkan error. update multiple yang agan inginkan berdasarkan id, dan agan secara statis menyebut idnya 1-10 tanpa memperdulikan ada atau tidaknya row yang hilang. mengapa saya katakan demikian karena:

for ($e=1; $e<=10; $e++)
   {
      $edd = Setting::where('id', '=', $e)->update([ // disini agan ingin cari id = $e, dimana $e adalah perulangan yang agan tentukan $e=1, $e<=10. dengan kata lain agan telah yakin bahwa tidak ada row yang hilang di antara row 1-10

      ....


2. Kasus seperti ini biasanya lebih mudah untuk value yang sama, namun karena agan menyebutkan "nama2 isi2, nama3, isi3, sampai ... nama10, isi10", berarti saya anggap value tersebut dinamis, tergantung input user.

kalau asumsi saya ini sudah sama dengan kasus yang agan ingin pecahkan berikut pemecahannya:

1. HTML - modifikasi input menjadi array kita lakukan ini karena yang saya bayangkan dari pertanyaan agan adalah ada banyak input untuk nama, ada banyak input untuk isi, dimana nama dan isi adalah 1 row. nama1 - isi1 (1 row), nama2 - isi2 (1 row). kesimpulan nama banyak, isi juga banyak.

@foreach($datas $key=>$data) // silahkan disesuaikan berdasarkan data yg agan passing ke view
  <input type="text" name="nama[{{$key}}]" value="{{$data->nama}}">
  <input type="text" name="isi[{{$key}}]" value="{{$data->isi}}">
@endforeach

2. BACK-END UPDATE dengan LARAVEL

public function editDatas(Request $rqs) // silahkan disesuaikan
  {
    // mempersiapkan id dalam bentuk array untuk mendapatkan semua row
    $ids = [];
    for ($id=1; $id <= 10; $id++){
      array_push($ids, $id);
    }

    // dapatkan semua row dengan eloquent
    $datas = Data::whereIn('id', $ids)->get();

    // lakukan looping untuk mengupdate semua row yang telah didapat
    foreach($datas as $key => $data)
    {
       $data->nama= $rqs->nama[$key];
       $data->isi= $rqs->isi[$key];
       $data->update();
    }

    .....
    // silahkan lakukan callback setelah semua data telah diupdate bisa redirect atau apa saja
    // saran silahkan analisis lebih lanjut terkait eager loading, mungkin ada yang bisa dapatkan cara agar query yg dieksekusi hanya 1.

avatar onirusama
@onirusama

265 Kontribusi 184 Poin

Dipost 7 tahun yang lalu

Jawaban Terpilih

Terima kasih atas penjelasannya @onirusama. Setelah saya explore lebih mendalam dan karena saya ingin kode yang lebih simple, ternyata bisa dengan cara seperti ini.

for ($e=1; $e<=Setting::count(); $e++)
    {
      $edd = Setting::where('id', '=', $e)->update([
          'nama'=>$request->{"nama{$e}"},
          'isi' =>$request->{"isi{$e}"},
        ]);
    }

avatar mading
@mading

11 Kontribusi 4 Poin

Dipost 7 tahun yang lalu

Login untuk ikut Jawaban