首页 > 解决方案 > Laravel 8 验证输入 - 如果输入的值大于或等于另一个表中的值,则验证失败

问题描述

在 Laravel 8 中,我想对大于或等于不同表中另一列的整数值的输入整数值进行验证,然后验证失败,因为执行了另一列的整数值。

所以我有一张这样的桌子

巴朗表

+------------+---------------------------+----------------+----------------+------------+
| kodebarang | namabarang                | hargapenjualan | hargapembelian | jumlahstok |
+------------+---------------------------+----------------+----------------+------------+
| ALRT-0012  | SAPU IJUK KUNING          |           3500 |           3000 |        227 |
| ALRT-0014  | SAPU TEBAS HIJAU          |           4500 |           4000 |        141 |

其中“jumlahstok”是有多少“namabarang”的信息。

然后我有一个要插入新数据的表

NotaKeluar 表

+---------------+------------+------------+----------------+
| notranskeluar | kodebarang | jumlahbeli | tothargakeluar |
+---------------+------------+------------+----------------+
| TK-2101.00001 | ALTK-0055  |          5 |          17500 |
| TK-2101.00001 | MAIN-0094  |          6 |         360000 | 

因此,当插入来自 NotaKeluar 的新数据时,由于从 NotaKeluar 表中插入了 jumlahbeli 列和 kodebarang 列,因此 Barang 表中的 jumlahstok 列会减少。(jumlahstok 专栏 - jumlahbeli 专栏)

然后我有一个我想像这样验证的函数:

public function store_notakeluar(Request $request)
{
    $value1 = $request-> transaksikeluar;
    $value2 = $request-> namabarang_konsumen;
    $value3 = $request-> jumlahbarang_konsumen;
    
    Request()->validate([
        'namabarang_konsumen' => 'required|exists:Barang,namabarang',
        'jumlahbarang_konsumen' => 'required|numeric|min:1|max:Barang,namabarang,'.$value2.',Barang,jumlahstok',
    ],[
        'namabarang_konsumen.required' => 'Nama barang wajib diisi!',
        'namabarang_konsumen.exists' => 'Nama barang tidak ada di stok!',
        'jumlahbarang_konsumen.required' => 'Jumlah barang wajib diisi!',
        'jumlahbarang_konsumen.numeric' => 'Jumlah barang harus angka!',
        'jumlahbarang_konsumen.min' => 'Jumlah barang minimal 1!',
        'jumlahbarang_konsumen.max' => 'Jumlah barang yang dibeli melebihi jumlah stok!',
    ]);
    
    DB::select('call spNotaKeluar(?,?,?)',[$value1,$value2,$value3]);

    return redirect('home/daftar_transaksikeluar/detil_notakeluar/'.$value1)->with('tambah', 'Nota telah berhasil ditambahkan');
}

但问题是,如果我输入 namabarang_konsumen(从 NotaKeluar 表转换为 kodebarang)和 jumlahbarang_konsumen(从 NotaKeluar 表转换为 jumlahbeli 列)大于或等于 Barang 表中的 jumlahstok 列(将 namabarang_konsumen 输入转换为来自 NotaKeluar 的 kodebarang 是来自 Barang 的 kodebarang),没有发生失败的验证,而是插入到 NotaKeluar 表并将 jumlahstok 列从 Barang 表更改为 0。(我将其编程为 0 <0)

示例是这样的,如果我输入 namabarang_konsumen "SAPU IJUK KUNING"(从 NotaKeluar 表转换为 kodebarang)并输入 jumlahbarang_konsumen "300",但在 Barang 表中,namabarang 列是 "SAPU IJUK KUNING" 的 jumlahstok 列是 227。我尝试为此提交,但不是因为 jumlahbarang_konsumen 输入超过 Barang 表中的 jumlahstok 列而导致验证失败,而是插入并且来自 Barang 的 jumlahstok 列变为 0。

所以,我不想让输入像这样,如果来自 Barang 表的 jumlahbarang_konsumen input >= jumlahstok 列,它就会插入。但是我想让失败的验证发生,即 jumlahbarang_konsumen 超过了 Barang 表中的 jumlahstok 列(其中来自 Barang 表的 namabarang 是 namabarang_konsumen 输入),因此它没有插入到 NotaMasuk 表中。

我试图在许多教程中找到它,但它没有用。我怎样才能做到这一点?

注意:jumlahbarang_konsumen 的验证在公共函数 store_notakeluar的第 9 行

标签: phpmysqllaravelvalidationlaravel-8

解决方案


推荐阅读