问题描述
我在 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');
}
当我点击保存时,number_npe 已成功自动添加。
但是我想让年份变的时候,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');
}