Nano Hash - криптовалюты, майнинг, программирование

Laravel удаляет все значения сводной таблицы

У меня есть две модели [Tag and Topic].

ТЕГ:

class Tag extends Model{
    protected $fillable = ['name'];
    public function topics(){
        return $this -> belongsToMany('\App\Topic','tag_topic')->withPivot('topic_id', 'category_id');
    }
}

ТЕМА:

class Topic extends Model{
    protected $fillable = [ 'user_id', 'creator_id', 'name', 'category_id'];

    public function tags(){
        return $this -> belongsToMany('\App\Tag', 'tag_topic')->withPivot('topic_id', 'category_id');
    }
}

Затем у меня есть миграции для обеих таблиц и сводной таблицы. [ТЕГ]

Schema::create('tags', function (Blueprint $table) {
        $table->engine = 'InnoDB';
        $table->increments('id')->unsigned()->unique();
        $table->string('name') -> unique();
        $table->timestamps();
    });

[ТЕМА]

Schema::create('topics', function (Blueprint $table) {
        $table->engine = 'InnoDB';
        $table->increments('id')->unsigned()->unique();
        $table->integer('user_id') -> unsigned();
        $table->integer('creator_id') -> unsigned();
        $table->string('name');
        $table->enum('status', ['pending', 'accepted']);
        $table->integer('category_id')->unsigned();
        $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade')->onUpdate('cascade');
        $table->foreign('creator_id')->references('id')->on('creators')->onDelete('cascade')->onUpdate('cascade');
        $table->foreign('user_id')->references('user_id')->on('creators')->onDelete('cascade')->onUpdate('cascade');
        $table->timestamps();
    });

[ВРАЩАТЬСЯ]

Schema::create('tag_topic', function (Blueprint $table) {
        $table->increments('id')->unsigned()->unique();
        $table->integer('tag_id') -> unsigned() -> nullable();
        $table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade')->onUpdate('cascade');
        $table->integer('topic_id') -> unsigned() -> nullable();
        $table->foreign('topic_id')->references('id')->on('topics')->onDelete('cascade')->onUpdate('cascade');
        $table->integer('category_id') -> unsigned() -> nullable();
        $table->foreign('category_id')->references('category_id')->on('topics')->onDelete('cascade')->onUpdate('cascade');
        $table->timestamps();
    });

Мой вопрос: как только я удаляю любую ТЕМУ, независимо от того, какую из них, она автоматически удаляет ВСЕ, буквально все из сводной таблицы.

Что я делаю, чтобы удалить тему, так это:

$topic = Topic::where('name', '=', $request -> topic_name) -> first();
$category = Category::where('id', '=', $topic->category_id) -> first();
$topic -> delete();

Но он удаляет все, любая помощь, я что-то упускаю?

21.03.2018

Ответы:


1

Я думаю, ваша проблема здесь в схеме темы:

$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade')->onUpdate('cascade');
$table->foreign('creator_id')->references('id')->on('creators')->onDelete('cascade')->onUpdate('cascade');
$table->foreign('user_id')->references('user_id')->on('creators')->onDelete('cascade')->onUpdate('cascade');

Вы каскадируете от одной удаленной темы к любому пользователю, создателю или категории, которая затем каскадирует обратно в таблицу тем, относящуюся ко всем этим удаленным пользователям, создателям и категориям, которая затем просто зацикливается, пока вся таблица не будет удалено. Я бы удалил некоторые из этих каскадных эффектов.

21.03.2018
  • я думаю так же 22.03.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..