Laravel Table 的自定义验证
Laravel Custom Validation for Table
table 'angkatan'
我有一个名为 'angkatan' 的 table,它有 ID、id_angkatan、nama_angkatan 和状态。 status 列是枚举,包含 'aktif' 和 'tidak aktif'。
我想在 Laravel 中为这个 table 提供规则,其中这个 table 只允许最多 4 个和最少 1 个状态 'aktif'。没有多少状态的规则'tidak aktif'
$jml_angkatan_aktif = \App\Models\Angkatan::where('status', 'Aktif')->get('id_angkatan')->count();
使用 $jml_angkatan_aktif 变量我得到 id_angkatan 的数量 'Aktif' 所以我可以计算它是否超过 4 和低于 1。但问题是我可以' 提供此自定义验证。此自定义验证的目的是我希望如果此 table 中已经有 4 个状态 'aktif',则人们无法添加 'angkatan'。我希望你能理解我的解释。这是 AngkatanController 店内方法的代码。
public function store(Request $request) {
$validator = Validator::make($request->all(),[
'id_angkatan' => 'required|unique:angkatan',
'nama_angkatan' => 'required|unique:angkatan',
'status' => ['required', function ($attribute, $e) {
$jml_angkatan_aktif = \App\Models\Angkatan::where('status', 'Aktif')->get('id_angkatan')->count();
if ($jml_angkatan_aktif > 4) {
$e('Batas Maksimal '.$attribute.' Aktif untuk Angkatan adalah 4');
}
elseif ($jml_angkatan_aktif < 1) {
$e('Batas Minimal '.$attribute.' Aktif untuk Angkatan adalah 1');
}
},
],
]);
if($validator->fails()) {
return response()->json(['status'=>0, 'error'=>$validator->errors()->toArray()]);
} else {
$angkatan = new Angkatan;
$angkatan->id_angkatan = $request->id_angkatan;
$angkatan->nama_angkatan = $request->nama_angkatan;
$angkatan->status = $request->status;
$query = $angkatan->save();
if ($query) {
return response()->json(['status'=>1, 'msg'=>'Angkatan Berhasil Ditambah']);
}
}
}
这里是'angkatan'的页面浏览量列表
view of page
您是否看过 this laravel 创建自定义规则的文档?
您似乎在闭包中错过了 $value 争论:
'status' => ['required', function ($attribute, $value, $e) {
$jml_angkatan_aktif = \App\Models\Angkatan::where('status', 'Aktif')->get('id_angkatan')->count();
if ($jml_angkatan_aktif > 4) {
$e('Batas Maksimal '.$attribute.' Aktif untuk Angkatan adalah 4');
}
elseif ($jml_angkatan_aktif < 1){
$e('Batas Minimal '.$attribute.' Aktif untuk Angkatan adalah 1');
}
},
我终于得到了我想要的结果,使用嵌套解决了问题,这是最终代码
public function edit(Request $request, $id)
{
$angkatan_aktif = \App\Models\Angkatan::where('status', 'Aktif')->get();
$angkatan = Angkatan::find($id);
$angkatan->id_angkatan = $request->id_angkatan;
$angkatan->status = $request->status;
$angkatan->nama_angkatan = $request->nama_angkatan;
$angkatan->status = $request->status;
if($angkatan_aktif->count() == 4){
if($angkatan->status == "Aktif"){
return redirect('/pengaturan')->with('pesan-angkatan-error', 'Gagal edit! Angkatan Aktif Sudah Mencapai Batas Maksimum : 4');
}
elseif($angkatan->status == "Tidak Aktif"){
$query = $angkatan->save();
if ($query){
return redirect('/pengaturan')->with('pesan-angkatan', 'Angkatan Berhasil Diedit');
}
}
}
elseif($angkatan_aktif->count() < 4){
$query = $angkatan->save();
if ($query){
return redirect('/pengaturan')->with('pesan-angkatan', 'Angkatan Berhasil Diedit');
}
}
}
这是结果,使用 blade 条件添加按钮不会出现,所以使用存储方法不会打扰我,现在我不能再添加 'angkatan' if status 'aktif' = 4 状态 'aktif' 也没有通过我想要的更新方法超过 4。
if status 'aktif' < 4
if status 'aktif' = 4
table 'angkatan'
我有一个名为 'angkatan' 的 table,它有 ID、id_angkatan、nama_angkatan 和状态。 status 列是枚举,包含 'aktif' 和 'tidak aktif'。 我想在 Laravel 中为这个 table 提供规则,其中这个 table 只允许最多 4 个和最少 1 个状态 'aktif'。没有多少状态的规则'tidak aktif'
$jml_angkatan_aktif = \App\Models\Angkatan::where('status', 'Aktif')->get('id_angkatan')->count();
使用 $jml_angkatan_aktif 变量我得到 id_angkatan 的数量 'Aktif' 所以我可以计算它是否超过 4 和低于 1。但问题是我可以' 提供此自定义验证。此自定义验证的目的是我希望如果此 table 中已经有 4 个状态 'aktif',则人们无法添加 'angkatan'。我希望你能理解我的解释。这是 AngkatanController 店内方法的代码。
public function store(Request $request) {
$validator = Validator::make($request->all(),[
'id_angkatan' => 'required|unique:angkatan',
'nama_angkatan' => 'required|unique:angkatan',
'status' => ['required', function ($attribute, $e) {
$jml_angkatan_aktif = \App\Models\Angkatan::where('status', 'Aktif')->get('id_angkatan')->count();
if ($jml_angkatan_aktif > 4) {
$e('Batas Maksimal '.$attribute.' Aktif untuk Angkatan adalah 4');
}
elseif ($jml_angkatan_aktif < 1) {
$e('Batas Minimal '.$attribute.' Aktif untuk Angkatan adalah 1');
}
},
],
]);
if($validator->fails()) {
return response()->json(['status'=>0, 'error'=>$validator->errors()->toArray()]);
} else {
$angkatan = new Angkatan;
$angkatan->id_angkatan = $request->id_angkatan;
$angkatan->nama_angkatan = $request->nama_angkatan;
$angkatan->status = $request->status;
$query = $angkatan->save();
if ($query) {
return response()->json(['status'=>1, 'msg'=>'Angkatan Berhasil Ditambah']);
}
}
}
这里是'angkatan'的页面浏览量列表 view of page
您是否看过 this laravel 创建自定义规则的文档?
您似乎在闭包中错过了 $value 争论:
'status' => ['required', function ($attribute, $value, $e) {
$jml_angkatan_aktif = \App\Models\Angkatan::where('status', 'Aktif')->get('id_angkatan')->count();
if ($jml_angkatan_aktif > 4) {
$e('Batas Maksimal '.$attribute.' Aktif untuk Angkatan adalah 4');
}
elseif ($jml_angkatan_aktif < 1){
$e('Batas Minimal '.$attribute.' Aktif untuk Angkatan adalah 1');
}
},
我终于得到了我想要的结果,使用嵌套解决了问题,这是最终代码
public function edit(Request $request, $id)
{
$angkatan_aktif = \App\Models\Angkatan::where('status', 'Aktif')->get();
$angkatan = Angkatan::find($id);
$angkatan->id_angkatan = $request->id_angkatan;
$angkatan->status = $request->status;
$angkatan->nama_angkatan = $request->nama_angkatan;
$angkatan->status = $request->status;
if($angkatan_aktif->count() == 4){
if($angkatan->status == "Aktif"){
return redirect('/pengaturan')->with('pesan-angkatan-error', 'Gagal edit! Angkatan Aktif Sudah Mencapai Batas Maksimum : 4');
}
elseif($angkatan->status == "Tidak Aktif"){
$query = $angkatan->save();
if ($query){
return redirect('/pengaturan')->with('pesan-angkatan', 'Angkatan Berhasil Diedit');
}
}
}
elseif($angkatan_aktif->count() < 4){
$query = $angkatan->save();
if ($query){
return redirect('/pengaturan')->with('pesan-angkatan', 'Angkatan Berhasil Diedit');
}
}
}
这是结果,使用 blade 条件添加按钮不会出现,所以使用存储方法不会打扰我,现在我不能再添加 'angkatan' if status 'aktif' = 4 状态 'aktif' 也没有通过我想要的更新方法超过 4。
if status 'aktif' < 4
if status 'aktif' = 4