如何在 Laravel/PHP 中每年重新启动自动编号?

问题描述

我在 Models Number_npe 中编写了这样的代码

public function nomor_akhir()
{
    $query = DB::table('nomor_npe')
        ->select('*')
        ->orderBy('id','DESC')
        ->first();
    return $query;
}

然后是控制器:

public function nomor_npe_store(Request $req)
{
    $tanggal_npe = $req->input('tanggal_npe');
    $pesan  = new Nomor_npe();
    $check  = $pesan->nomor_akhir();
    if($check) {
        $nomor_npe    = $check->nomor_npe+1;
    }else{
        $nomor_npe    = 1;
    }

    DB::table('nomor_npe')->insert([
        'nomor_npe'    => $nomor_npe,'tanggal_npe'    => $tanggal_npe
    ]);

    return redirect('nomor_npe')->with('success','Nomor NPE berhasil ditambahkan');
}

添加 NPE 编号显示如下:

enter image description here

当我点击保存时,number_npe 已成功自动添加

enter image description here

但是我想让年份变的时候,number_npe又自动从1重新开始...请知道的人帮忙

解决方法

我必须把它写成一个答案,但这不是 100% 对你的代码的回答,这些只是让你拥有更好代码的提示。 (所以如果有人也看到这个,他们也知道)

首先,避免 100% 用英语以外的其他语言编写代码,因为我们正在遵循它(我们不会说您的语言)并且除非我们使用翻译器,否则我们几乎不理解任何东西......

因此,如果您打算使用 Laravel,请尽量避免使用 DB,因为您可以只使用模型(希望您已经创建了它...)。

所以你的类应该是这样的:

public function lastNumber()
{
    return NomorNpe::orderByDesc('id')->first();
}

那么你的控制器应该是这样的:

public function store(Request $request,NomorNpe $nomor_npe)
{
    NomorNpe::create([
        'nomor_npe' => $nomor_npe->lastNumber() ? $nomor_npe->lastNumber()->nomor_npe + 1 : 1,'tanggal_npe' => $request->input('tanggal_npe')
    ]);

    return redirect('nomor_npe')->with('success','Nomor NPE berhasil ditambahkan');
}

看看我如何将所有内容从 13 行代码减少到 5 行代码,并且 100% 可读......(或 9 行到 2 行)


确保使用 Laravel 为您提供的“默认”,使用模型而不是 DB::table('xxx'),利用 Eloquent。

,

当年份改变时,使用此代码从 1 开始数字:

public function nomor_npe_store(Request $req) {
    $tanggal_npe = $req->input('tanggal_npe');
    //---Current Date
    $date = date('Y-m-d',time());

    //---NOMOR NPE
    $nomor_npe = DB('number_npe')->whereYear('tanggal_npe',$date)->max('normor_npe');
    if (!$nomor_npe) {
        $nomor_npe = 1;
    } else {
        $nomor_npe++;
    }
    DB::table('nomor_npe')->insert([
        'nomor_npe'    => $nomor_npe,'tanggal_npe'    => $tanggal_npe
    ]);

    return redirect('nomor_npe')->with('success','Nomor NPE berhasil ditambahkan');
}