Удалять и обновлять модель, связанную в php laravel

я работал в Веб app тип проведи опрос посредством estapas - вопросов - ответы, прямо сейчас уже у меня есть часть сохранения ответов каждого вопроса и вопросов в Вашем соответствующем этапе, но во время обновления или удаления этапа, останься обновленной с последней информацией, но например если удалите pregunta, он не появляется визуально, но в базе данных остается вопрос с Вашими ответами занимая место

Я описываю в img каков это проблема

Imagen 1

У меня есть 2 вопроса в этапе, как возможно видеть, удаляю ли я одну, я был бы должен оставаться, как я показываю в нижнем Изображении, но это не так, всегда показывает их мне сама, если я добавляю очевидно, если он добавляет это мне, не, как удаление этой связи в базе данных для того, чтобы actualize

imagen2

EstapasEdit.blade.php

@extends('layouts.layout')

@section('content')

    
@method('put')

ETAPA

PREGUNTAS

@foreach($questions as $question) @endforeach
Respuestas @foreach($question->answers as $answer) @if($question->type->name == App\Type::OPCIONES['U']) @elseif($question->type->name == App\Type::OPCIONES['C']) @elseif($question->type->name == App\Type::OPCIONES['M']) @endif @endforeach
Agregar
@endsection

Модель Этапа

class Stage extends Model
{

    protected $fillable = [
        'id',
        'title',
        'description'
    ];

    public function questions(){
        return $this->hasMany('App\Question');
    }

}

Модель Прегунта

class Question extends Model
{
    protected $table = 'questions';
    protected $fillable = [
        'id',
        'title',
        'stage_id',
        'type_id',
    ];

    public function stage() {
        return $this->belongsTo('App\Stage');
    }

    public function type(){
        return $this->belongsTo('App\Type');
    }

    public function answers(){
        return $this->hasMany('App\Answer');
    }

}

Модель Респуеста

class Answer extends Model
{

    public function __construct(array $attributes = ['title'])
    {
        parent::__construct($attributes);
    }

    protected $table = 'answers';
    protected $fillable = [
        'title',
        'question_id'
    ];

    public function question() {
        return $this->belongsTo('App\Question');
    }

    public static function create(array $array) {
        $answers = [];


        return $answers;
    }

}

Часть драйвера, который он обновляет

public function update(Request $request, Stage $stage)
{

    $rules = [
        'title' => 'max:150|string|unique:stages',
        'description' => 'max:250|string'
    ];

    $stage = Stage::findOrFail($stage)->first();

    if ($request->get('title') != $stage->title ||
        $request->get('description') != $stage->description) {

        $this->validate($request, $rules);
        $stage->title = $request->get('title');
        $stage->description = $request->get('description');

        $stage->save();
    }

    /*--------- SE RECORRE TODAS LAS PREGUNTAS  ---------*/
    foreach ($request->get('questions') as $id_q => $question) {
        $question_test = new Question([
            'id' => $id_q,
            'title' => $question
        ]);
        $type = Type::findOrFail($request->get('types')[$id_q]);

        /*--------- SE ACTUALIZA LOS DATOS DE LA PREGUNTA ---------*/
        $question_test->stage()->associate($stage);
        $question_test->type()->associate($type);

        if ($question_test->title == '') {
            /*TODO: AGREGAR ENVIO DE ERROR*/
        }

        $question_test = Question::updateOrCreate([
            'id' => $question_test->id
        ],[
            'title' => $question_test->title,
            'stage_id' => $question_test->stage_id,
            'type_id' => $question_test->type_id
        ]);

        /*--------- SE ACTUALIZA LOS RESPUESTAS DE LA PREGUNTA ---------*/
        foreach ($request->get('answers') as $key => $answers) {
            if ($id_q == $key) {
                foreach ($answers as $id_a => $answer) {

                    if ($answer == '') {
                        /*TODO: AGREGAR ENVIO DE ERROR*/
                    }

                    $question_test->answers()->updateOrCreate([
                        'id' => $id_a
                    ],[
                        'title' => $answer
                    ]);

                }
            }
        }

    }

    return redirect('/dashboard/formulario/stages');

}

Миграции

Этапы

class CreateStagesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('stages', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->text('description');
            $table->timestamps();
        });
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('stages');
    }
}

Вопросы

class CreateQuestionsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('questions', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->unsignedInteger('stage_id');
            $table->unsignedInteger('type_id');
            $table->timestamps();
            $table->foreign('stage_id')->references('id')->on('stages');
            $table->foreign('type_id')->references('id')->on('types');
        });
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('questions', function (Blueprint $table) {
            $table->dropForeign('questions_type_id_foreign');
            $table->dropForeign('questions_stage_id_foreign');
        });
        Schema::dropIfExists('questions');
    }
}

Ответы

class CreateAnswersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('answers', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->unsignedInteger('question_id');
            $table->timestamps();
            $table->foreign('question_id')->references('id')->on('questions');
        });
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('answers', function (Blueprint $table) {
            $table->dropForeign('answers_question_id_foreign');
        });
        Schema::dropIfExists('answers');
    }
}

5
задан 13.06.2019, 17:22
0 ответов