Laravel SQL [23000] Ошибка удаления - PullRequest
0 голосов
/ 28 августа 2018

Есть некоторые проблемы с функцией удаления для одной таблицы. Мне нужна функция, которая будет обрабатывать исключения для ограничений внешнего ключа. Необходимо исправить эту функцию, чтобы я мог добавить softdelete. Я попытался скопировать один столбец из той же таблицы, и когда я удалил все хорошо, но есть 2 столбца, которые я не могу удалить. Я поставлю здесь функцию удаления. Если вам нужно больше кода из программного обеспечения, пожалуйста, сообщите мне, но я думаю, что это все, что вам нужно знать, в чем проблема.

Ошибка массажа : pastebin.com/CktBbbaX (по какой-то причине не может разместить в стеке)

Это функция php:

 public function destroy($id)
        {
            Rate::findOrFail($id)->delete();

            return redirect()->back()->with('status', __('messages/success.delete'));
        }

Таблица тарифов:

public function up()
    {
        Schema::create('rates', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('supplier_id')->unsigned()->nullable();
            $table->integer('house_id')->unsigned()->nullable();
            $table->boolean('b4g_edit');
            $table->integer('derived_qty')->unsigned()->nullable();
            $table->integer('derived_price')->unsigned()->nullable();
            $table->tinyInteger('limit_quantity')->default(0);
            $table->decimal('round_prices', 10, 3);

            // TRANSLATABLE
            $table->integer('name_frontend')->unsigned();
            $table->integer('name_backend')->unsigned();
            $table->integer('description')->unsigned();
            // END TRANSLATABLE

            $table->timestamps();
            $table->integer('created_by')->unsigned()->nullable();
            $table->integer('updated_by')->unsigned()->nullable();

            $table->foreign('supplier_id')->references('id')->on('suppliers')->onDelete('SET NULL');
            $table->foreign('house_id')->references('id')->on('houses')->onDelete('SET NULL');
            //translation foreign keys
            $table->foreign('name_frontend')->references('group_id')->on('translations')->onDelete('CASCADE');
            $table->foreign('name_backend')->references('group_id')->on('translations')->onDelete('CASCADE');
            $table->foreign('description')->references('group_id')->on('translations')->onDelete('CASCADE');         
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('rates');
    }

А это норма-части:

public function up()
    {
        Schema::create('rate_parts', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('rate_id')->unsigned();
            $table->enum(
                'product_type',
                [ 'overnight','transport','activity','addon' ]
            );
            $table->integer('product_id')->unsigned();
            $table->date('date_from');
            $table->date('date_to');
            $table->enum(
                'type',
                [
                    'dummy',
                    'quantity',
                    'price',
                    'closed',
                    'cta',
                    'ctd',
                    'minstay',
                    'start',
                    'expire',
                    'min',
                    'max',
                    'max_beds',
                    'persons',
                    'daily_price',
                    'km_price',
                    'pricechange_abs',
                    'pricechange_rel'
                ]
            );
            $table->decimal('value', 10, 2);

            $table->timestamps();
            $table->integer('created_by')->unsigned()->nullable();
            $table->integer('updated_by')->unsigned()->nullable();

            $table->index(['product_id', 'product_type']);
            $table->foreign('rate_id')->references('id')->on('rates');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('rate_parts');
    }

1 Ответ

0 голосов
/ 28 августа 2018

если в таблице A есть столбец с внешним ключом, ссылающимся на таблицу B (например, Table_B_ID), вы не можете удалить строку таблицы B, на которую есть ссылка, поскольку существует зависимость с внешним ключом. Вам нужно удалить контрольную строку, указывающую на строку таблицы B.

https://stackoverflow.com/a/34501633/4925008

Проверьте этот ответ на проблему, аналогичную вашей. Вам нужно либо добавить ON DELETE CASCADE, либо вручную удалить строку перед удалением основной строки, которую вы пытаетесь удалить

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