【问题标题】:How to make autonumber restart every year in Laravel/PHP?如何在 Laravel/PHP 中每年重新启动自动编号?
【发布时间】:2021-07-08 01:18:58
【问题描述】:

我在 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 编号显示如下:

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

但我想在年份变化时,number_npe再次从1自动重新启动......请知道的人帮助

【问题讨论】:

  • 如果你想再增加一年,但它在数据库中不存在怎么办?你会得到无序的 nomor_npe。例如 id 5 和 nomor_npe 1 和年 2022-MM-DD。添加另一行 id 6 和 2022-MM-DD 将导致 nomor_npe 6 而不是 2。基于您的模型“nomor_akhir”,它是从 DB 获取最新 id

标签: php laravel autonumber


【解决方案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。

【讨论】:

    【解决方案2】:

    当年份改变时,使用此代码从 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');
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-17
      • 2022-01-15
      • 1970-01-01
      • 2021-04-08
      • 2021-08-06
      • 2015-07-21
      相关资源
      最近更新 更多