• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Laravel - błąd przy wykonywaniu migracjii

42 Warsaw Coding Academy
0 głosów
400 wizyt
pytanie zadane 25 listopada 2019 w PHP przez Q_Nick Mądrala (5,010 p.)

Witam. Przy próbie wykonania migracji w frameworku Laravel (wersja 6.0.3) i bazie danych MySQL (serwis remotemysql.com) wywala mi błąd:

Migrating: 2019_11_22_094321_add_foreign_keys

   Illuminate\Database\QueryException  : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') default character set utf8mb4 collate 'utf8mb4_unicode_ci'' at line 1 (SQL: create table `parts` () default character set utf8mb4 collate 'utf8mb4_unicode_ci')

  at /home/kamils/php/collection/vendor/laravel/framework/src/Illuminate/Database/Connection.php:665
    661|         // If an exception occurs when attempting to run a query, we'll format the error
    662|         // message to include the bindings with SQL, which will make this exception a
    663|         // lot more helpful to the developer instead of just the database's errors.
    664|         catch (Exception $e) {
  > 665|             throw new QueryException(
    666|                 $query, $this->prepareBindings($bindings), $e
    667|             );
    668|         }
    669| 

  Exception trace:

  1   PDOException::("SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') default character set utf8mb4 collate 'utf8mb4_unicode_ci'' at line 1")
      /home/kamils/php/collection/vendor/laravel/framework/src/Illuminate/Database/Connection.php:453

  2   PDO::prepare("create table `parts` () default character set utf8mb4 collate 'utf8mb4_unicode_ci'")
      /home/kamils/php/collection/vendor/laravel/framework/src/Illuminate/Database/Connection.php:453

  Please use the argument -v to see more details.

A tu migracja, która wywołuje ten błąd: 

<?php

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

class AddForeignKeys extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {

        Schema::create('parts', function (Blueprint $table) {
            $table->foreign('owner')->references('id')->on('users')->change();
        });

        Schema::create('sets', function (Blueprint $table) {
            $table->foreign('owner')->references('id')->on('users')->change();
        });

        Schema::create('images', function (Blueprint $table) {
            $table->foreign('partId')->references('id')->on('parts')->change();
            $table->foreign('setId')->references('id')->on('sets')->change();
        });
        Schema::table('features', function (Blueprint $table){
            $table->foreign('featureType')->references('id')->on('feature_types')->change();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        //
    }
}

Proszę o pomoc, googlowanie i samodzielne próby tylko pogarszały sprawę :/

1 odpowiedź

0 głosów
odpowiedź 25 listopada 2019 przez Arkadiusz Waluk Ekspert (290,090 p.)
wybrane 25 listopada 2019 przez Q_Nick
 
Najlepsza

Zapewne chodzi o to, że tworzysz tabele parts, sets i images, które nie zawierają żadnych kolumn. W rezultacie powstaje zapytanie jak z błędu

create table `parts` () default character set

i zapewne zapis pustki między nawiasami, gdzie oczekuje definicji kolumn, mu się nie podoba. 

komentarz 25 listopada 2019 przez Q_Nick Mądrala (5,010 p.)
hm... parts ma poprawną strukturę, zawiera kolumny, tak samo jak pozostałe tabele
komentarz 25 listopada 2019 przez Arkadiusz Waluk Ekspert (290,090 p.)
Nie widzę w tych migracjach żadnych kolumn, chcesz tworzyć nowe tabele jedynie z dodaniem kluczy obcych.

Może zamiast tworzyć tabele chciałeś je modyfikować, tak jak features?
1
komentarz 25 listopada 2019 przez Q_Nick Mądrala (5,010 p.)
Cały dzień nad tym siedzę i tego nie zauważyłem. Facepalm.

Tak, faktycznie ma być table zamiast create.

Podobne pytania

0 głosów
0 odpowiedzi 469 wizyt
pytanie zadane 23 lipca 2018 w PHP przez kevin Mądrala (5,010 p.)
0 głosów
1 odpowiedź 364 wizyt
0 głosów
1 odpowiedź 255 wizyt
pytanie zadane 6 marca 2021 w PHP przez CSSoup Mądrala (6,460 p.)

93,385 zapytań

142,384 odpowiedzi

322,540 komentarzy

62,745 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...