我在名为destroy_multiple
的控制器函数中具有一个函数,该函数可以在一定条件下删除数据库的某个元素,例如,如果该元素的状态为 PUBLICADO ,则不能被删除。
当这种情况为真时,应该显示一条特定的消息,但是会出现此错误页面 SQLSTATE[23000]
这是我的观点代码
@if (session()->has('status'))
<div class=" alert alert-warning" role="alert">
<p>{{ session('status') }}</p>
</div>
@endif
我的控制器
public function destroy_multiple(Request $request)
{
$eliminados=0;
$enuso=0;
$Status=Status::where('descripcion','Publicado')->first();
//dd($request->codigos);
//validar los datos
$rules = [
'cursos' => 'required'
];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return Redirect::back()->withErrors($validator)->withInput($request->all());
}
foreach ($request->cursos as $curso){
$cursodb = Cursos::find($curso);
if($cursodb->status_id != $Status->id){
$cursodb->delete();
$eliminados +=1;
}
else{
$enuso =1;
}
}
$texto='';
if($eliminados>0){
$texto = 'Se eliminaron '.$eliminados.' cursos con éxito';
//Session::flash('status', 'Se eliminaron '.$eliminados.' códigos, sin embargo '.$enuso.' códigos no se eliminaron porque estan es uso');
}
else{
$texto='No se eliminaron los cursos';
}
if($enuso > 0){
$texto .=', '.$enuso.' cursos no se puede eliminar porque tienen un estatus de Publicado';
}
Session::flash('status', $texto);
return redirect('cursos');
}
答案 0 :(得分:0)
在两个表之间设置外键约束是数据库模式 “ cursos”和其他表,使用外键“ curso_id” 并且在删除时您没有告诉架构执行任何操作,因此您违反了关键约束, 因此,您只应告诉它级联或在删除迁移文件时不执行任何操作:-
Schema::create('other_table', function (Blueprint $table) {
// Some other fields...
$table->integer('curso_id')->unsigned();
$table->foreign('curso_id')->references('id')->on('cursos')->onDelete('cascade');
});
它将正常工作。
或者只是删除外键约束并在模型文件中进行操作,但是请注意,删除时必须手动执行此操作:
DB::table('other_table')->where('curso_id', $curso->id )->delete();
但是约束比手动完成要好,但是您必须以正确的方式来做。
就像这里的Foreign Keys一样,但是他们最后一次提到它是5.0版本,原因是我不知道。