状态消息未显示在我的视图中

时间:2019-03-20 22:23:30

标签: laravel message laravel-blade

我在名为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');
}

1 个答案:

答案 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版本,原因是我不知道。

相关问题