Я пытаюсь установить связь между двумя таблицами через LARAVEL-MIGRATIONS, но получаю эту ошибку. Как я могу исправить? - PullRequest
0 голосов
/ 07 июля 2019

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

public function up()
    {
        Schema::create('vendas', function (Blueprint $table) {
            $table->bigIncrements('id_vendas');
            /*FOREIGN ATRIBURE FROM TABLE USERS*/
            $table->bigInteger('cliente');
            $table->string('produto', 100);
            $table->timestamps();
//
            /*REFENCING FOREIGN KEY*/
            $table->foreign('cliente')->references('id_cliente')->on('teste');
//
        });
    }

//AND THIS:

    public function up()
        {
            Schema::create('teste', function (Blueprint $table) {
                $table->bigIncrements('id_cliente');
                $table->string('nome_cliente');
                $table->boolean('estado');
                $table->text('obs');
                $table->timestamps();
            });
        }

Ответы [ 4 ]

0 голосов
/ 07 июля 2019

вы должны получить ошибку. потому что поля автоинкремента автоматически не подписываются. пока ваши внешние ключи не подписаны. просто добавьте -> unsigned (), когда вы определяете поле «клиент». Также вы должны создать таблицу 'teste' перед таблицей 'vendas'.

public function up()
{
    Schema::create('vendas', function (Blueprint $table) {
        $table->bigIncrements('id_vendas');
        /*FOREIGN ATRIBURE FROM TABLE USERS*/
        $table->bigInteger('cliente')->unsigned(); // the only modification you need
        $table->string('produto', 100);
        $table->timestamps();

        /*REFENCING FOREIGN KEY*/
        $table->foreign('cliente')->references('id_cliente')->on('teste');
    });
}
0 голосов
/ 07 июля 2019

Попробуйте точно сопоставить элемент FK с соответствующим полем таблицы. В этом случае добавьте unsigned в поле cliente таблицы vendas.

 $table->bigInteger('cliente')->unsigned();

Кроме того, вы не заметили, какую ошибку вы получаете, но Laravel из коробки ищет идентификатор модели в своих отношениях. Например. cliente_id на модели под названием Cliente . Если вы не собираетесь включать это, вам нужно будет указать это в методе отношений.

0 голосов
/ 07 июля 2019

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

        Schema::disableForeignKeyConstraints();

После миграции

        Schema::enableForeignKeyConstraints();

Попробуйте это

public function up()
    {
        Schema::disableForeignKeyConstraints();
        Schema::create('vendas', function (Blueprint $table) {
            $table->bigIncrements('id_vendas');
            /*FOREIGN ATRIBURE FROM TABLE USERS*/
            $table->bigInteger('cliente');
            $table->string('produto', 100);
            $table->timestamps();
//
            /*REFENCING FOREIGN KEY*/
            $table->foreign('cliente')->references('id_cliente')->on('teste');
//
        });
        Schema::enableForeignKeyConstraints();
    }
0 голосов
/ 07 июля 2019

Измените эту строку кода

        $table->bigInteger('cliente');

На

       $table->bigInteger('cliente')->unsigned();

Причина в том, что bigincrements создает столбец без знака, поэтому нам нужен столбец без знака при обращении к нему также

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