Проблемы при попытке установить отношения на Laravel - PullRequest
2 голосов
/ 24 марта 2020

У меня проблема при попытке выполнить миграцию. У меня есть таблица событий и таблица цветов. Я уже пытался установить связь между этими таблицами, используя Tinker, и проблем не было, но когда я использовал PhpmyAdmin, чтобы щелкнуть по идентификатору (чтобы увидеть, какое это поле), я просто не смог, потому что между этими таблицами нет связи. Вот мои две миграции:

Первая миграция:

//Event migration

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class EventList extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('events', function (Blueprint $table) {
            $table->increments('id');
            $table->string('nom', 45);
            $table->integer('couleur_id')->unsigned()->index();
            $table->integer('annee_cours_id')->unsigned()->index();
        });
        Schema::enableForeignKeyConstraints('events', function (Blueprint $table){
            $table->foreign('couleur_id')->references('id')->on('couleurs');
            $table->foreign('annee_cours_id')->references('id')->on('annee_cours');
        });
    }

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

Вторая миграция:

//Color migration

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class Couleur extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('couleurs', function (Blueprint $table){
           $table->increments('id');
           $table->string('nom', 45);
           $table->string('code_hexa', 45);
        });
    }

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

Я на самом деле использую концептор PhpmyAdmin (как на картинке) ниже), чтобы сделать отношения проще, но я хотел бы сделать ту же операцию, используя только код. Есть ли способ сделать это легко на Laravel без использования концептора PhpmyAdmin?

Заранее благодарим вас за ваши ответы.

Изображение примера взаимоотношений на PhpmyAdmin

РЕДАКТИРОВАТЬ: После использования php artisan migrate --pretend, я получил несколько строк, описывающих, что миграция сделала точно. Вот результат:

QuadrimestreList: create table `quadrimestres` (`id` int unsigned not null auto_increment primary key, `nom` varchar(45) not null) default character set utf8mb4 collate 'utf8mb4_unicode_ci'
EventHasTypeEvent: create table `event_has_type_events` (`Event_id` int unsigned not null, `type_event_id` int unsigned not null) default character set utf8mb4 collate 'utf8mb4_unicode_ci'
EventHasTypeEvent: alter table `event_has_type_events` add index `event_has_type_events_event_id_index`(`Event_id`)
EventHasTypeEvent: alter table `event_has_type_events` add index `event_has_type_events_type_event_id_index`(`type_event_id`)
EventHasTypeEvent: SET FOREIGN_KEY_CHECKS=1;
EventList: create table `events` (`id` int unsigned not null auto_increment primary key, `nom` varchar(45) not null, `couleur_id` int unsigned not null, `annee_cours_id` int unsigned not null) default character set utf8mb4 collate 'utf8mb4_unicode_ci'
EventList: alter table `events` add index `events_couleur_id_index`(`couleur_id`)
EventList: alter table `events` add index `events_annee_cours_id_index`(`annee_cours_id`)
EventList: SET FOREIGN_KEY_CHECKS=1;
EventHasQuadrimestre: create table `event_has_quadrimestres` (`Event_id` int unsigned not null, `quadrimestre_id` int unsigned not null) default character set utf8mb4 collate 'utf8mb4_unicode_ci'
EventHasQuadrimestre: alter table `event_has_quadrimestres` add index `event_has_quadrimestres_event_id_index`(`Event_id`)
EventHasQuadrimestre: alter table `event_has_quadrimestres` add index `event_has_quadrimestres_quadrimestre_id_index`(`quadrimestre_id`)
EventHasQuadrimestre: SET FOREIGN_KEY_CHECKS=1;
EventHasLocal: create table `event_has_locals` (`Event_id` int unsigned not null, `local_id` int unsigned not null) default character set utf8mb4 collate 'utf8mb4_unicode_ci'
EventHasLocal: alter table `event_has_locals` add index `event_has_locals_event_id_index`(`Event_id`)
EventHasLocal: alter table `event_has_locals` add index `event_has_locals_local_id_index`(`local_id`)
EventHasLocal: SET FOREIGN_KEY_CHECKS=1;
EventHasEnseignant: create table `event_has_enseignants` (`Event_id` int unsigned not null, `enseignant_id` int unsigned not null) default character set utf8mb4 collate 'utf8mb4_unicode_ci'
EventHasEnseignant: alter table `event_has_enseignants` add index `event_has_enseignants_event_id_index`(`Event_id`)
EventHasEnseignant: alter table `event_has_enseignants` add index `event_has_enseignants_enseignant_id_index`(`enseignant_id`)
EventHasEnseignant: SET FOREIGN_KEY_CHECKS=1;
Enseignant: create table `enseignants` (`id` int unsigned not null auto_increment primary key, `nom` varchar(45) not null) default character set utf8mb4 collate 'utf8mb4_unicode_ci'
Couleur: create table `couleurs` (`id` int unsigned not null auto_increment primary key, `nom` varchar(45) not null, `code_hexa` varchar(45) not null) default character set utf8mb4 collate 'utf8mb4_unicode_ci'
AnneeCours: create table `annee_cours` (`id` int unsigned not null auto_increment primary key, `nom` varchar(255) not null) default character set utf8mb4 collate 'utf8mb4_unicode_ci'
Horaire: create table `horaires` (`id` int unsigned not null auto_increment primary key, `nom` varchar(255) not null) default character set utf8mb4 collate 'utf8mb4_unicode_ci'
Local: create table `locals` (`id` int unsigned not null auto_increment primary key, `nom` varchar(45) not null, `commentaire` varchar(255) not null) default character set utf8mb4 collate 'utf8mb4_unicode_ci'
Reservation: create table `reservations` (`id` int unsigned not null auto_increment primary key, `numero_semaine` int not null, `date` datetime not null, `heure_debut` varchar(45) not null, `heure_fin` varchar(45) not null, `Event_id` int unsigned not null, `horaire_id` int unsigned not null, `local_id` int unsigned not null) default character set utf8mb4 collate 'utf8mb4_unicode_ci'
Reservation: alter table `reservations` add index `reservations_event_id_index`(`Event_id`)
Reservation: alter table `reservations` add index `reservations_horaire_id_index`(`horaire_id`)
Reservation: alter table `reservations` add index `reservations_local_id_index`(`local_id`)
Reservation: SET FOREIGN_KEY_CHECKS=1;
TypeEvent: create table `type_events` (`id` int unsigned not null auto_increment primary key, `nom` varchar(45) not null) default character set utf8mb4 collate 'utf8mb4_unicode_ci'

Не беспокойтесь о других таблицах, у них та же проблема, что и у таблицы «Событие» и «Couleurs». Я думаю, что это проблема внешних ключей, но я не вижу точно, где проблема. Полезен ли вывод?

РЕДАКТИРОВАТЬ 2: ОК, выглядит лучше, но когда я смотрю в концепт PhpmyAdmin, между таблицами нет никакой связи. Я не знаю, нормально ли это, может быть, PhpmyAdmin не распознает отношения так же, как Laravel миграции? Извините, если я прошу столько помощи.

1 Ответ

1 голос
/ 25 марта 2020

использовать “Schema::table(...)“, и НЕ Schema::enableForeignKeyConstraints

это должно работать ...

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