Сообщения о состоянии не отображаются на мой взгляд - PullRequest
0 голосов
/ 21 марта 2019

В контроллере есть функция с именем 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 голосов
/ 21 марта 2019

В вашей схеме базы данных вы устанавливаете ограничение внешнего ключа между двумя таблицами "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 по какой-то причине, которую я не знаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...