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

Laravel, automatyczna zmiana wartości domyślnych w bazie danych doctrine/dbal

VPS Starter Arubacloud
0 głosów
514 wizyt
pytanie zadane 16 marca 2019 w PHP przez Grzegorz Mikina Dyskutant (8,060 p.)
Mam takie pytanie, potrzebuję dodać takie rozszerzenie do composer.json a mianowicie doctrine/dbal v.2.4.2 bo nie mogę przeprowadzić migracji. I jak w cmd daję composer install to wszystko się ładnie ładuje i wyświetla mi sukces, później jak chcę dać php artisan migrate , wyświetla mi się błąd że brakuję właśnie dodatku doctrine/dbal. Czy ktoś się spotkał z takim problemem? SKąd ten błąd skoro ja to rozszerzenie mam zainstalowane.
komentarz 16 marca 2019 przez Arkadiusz Waluk Ekspert (287,550 p.)
Co dokładnie zrobiłeś? Dodałeś ręcznie do pliku composer.json doctrine/dbal i composer install? Czy composer require? Z opisu wynika tak, że zrobiłeś tylko install, a nigdzie nie zainstalowałeś samego DBALa, ale może to skrót myślowy.
komentarz 16 marca 2019 przez Grzegorz Mikina Dyskutant (8,060 p.)

Znalazłem plik composer.json dokładnie to wybrałem ten który jest pod projectem na dole, dopisałem w require {..
..
..
..
..
doctrine/dbal: v2.4.2
}
Następnie dałem w cmd xampp/htdocs/laravel/laravel composer install 
Nastepnie chciałem zrobić php artisan migrate i wyskoczyły mi błędy
 

C:\xampp\htdocs\laravel\laravel>composer install

Loading composer repositories with package information

Installing dependencies (including require-dev) from lock file

Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them.

Nothing to install or update

Generating optimized autoload files

> Illuminate\Foundation\ComposerScripts::postAutoloadDump

> @php artisan package:discover --ansi

Discovered Package: beyondcode/laravel-dump-server

Discovered Package: fideloper/proxy

Discovered Package: laravel/tinker

Discovered Package: nesbot/carbon

Discovered Package: nunomaduro/collision

Package manifest generated successfully.



C:\xampp\htdocs\laravel\laravel>php artisan migrate

Migrating: 2019_03_15_104723_add_foreign_doctors_to_visits



   RuntimeException  : Changing columns for table "visits" requires Doctrine DBAL; install "doctrine/dbal".



  at C:\xampp\htdocs\laravel\laravel\vendor\laravel\framework\src\Illuminate\Database\Schema\Grammars\ChangeColumn.php:30

    26|      */

    27|     public static function compile($grammar, Blueprint $blueprint, Fluent $command, Connection $connection)

    28|     {

    29|         if (! $connection->isDoctrineAvailable()) {

  > 30|             throw new RuntimeException(sprintf(

    31|                 'Changing columns for table "%s" requires Doctrine DBAL; install "doctrine/dbal".',

    32|                 $blueprint->getTable()

    33|             ));

    34|         }



  Exception trace:



  1   Illuminate\Database\Schema\Grammars\ChangeColumn::compile(Object(Illuminate\Database\Schema\Grammars\MySqlGrammar), Object(Illuminate\Database\Schema\Blueprint), Object(Illuminate\Support\Fluent), Object(Illuminate\Database\MySqlConnection))

      C:\xampp\htdocs\laravel\laravel\vendor\laravel\framework\src\Illuminate\Database\Schema\Grammars\Grammar.php:55



  2   Illuminate\Database\Schema\Grammars\Grammar::compileChange(Object(Illuminate\Database\Schema\Blueprint), Object(Illuminate\Support\Fluent), Object(Illuminate\Database\MySqlConnection))

      C:\xampp\htdocs\laravel\laravel\vendor\laravel\framework\src\Illuminate\Database\Schema\Blueprint.php:123

 

komentarz 16 marca 2019 przez Grzegorz Mikina Dyskutant (8,060 p.)
"require": {
        "php": "^7.1.3",
        "fideloper/proxy": "^4.0",
        "laravel/framework": "5.8.*",
        "laravel/tinker": "^1.0",
        "doctrine/dbal":"v2.4.2"
    },

 

komentarz 16 marca 2019 przez Arkadiusz Waluk Ekspert (287,550 p.)

Powinno działać. Skoro nie działa to obstawiam. że jednak coś się nie zainstalowało. Usuń z tego composer.json ten dopisek i wykonaj po prostu (sam doda, dobierze wersje, zaktualizuje locka itd.):

composer require doctrine/dbal

Edit:

        "doctrine/dbal":"v2.4.2"

Tu powinno być po prostu "2.4.2" jak już, bez żadnego v.

komentarz 21 marca 2019 przez Grzegorz Mikina Dyskutant (8,060 p.)
Nie ma to żadnego znaczenia, tak czy tak i tak jest w phhmyadmin ta sama wartość przy id i nic nie ulega zmianie.
komentarz 21 marca 2019 przez Arkadiusz Waluk Ekspert (287,550 p.)
Ale wcześniejszy błąd nadal występuje? Jeśli tak to nie ma się co dziwić, że nie działa. Coś dalej jest źle z tą paczką, że nie jest zainstalowana Jeżeli nie, to znaczy, że biblioteka się zainstalowała i to jest ok, ewentualnie błąd jest gdzieś indziej, pewnie w migracji.
komentarz 22 marca 2019 przez Grzegorz Mikina Dyskutant (8,060 p.)

Komunikaty w cmd przy próbie migracji. Stabilna wersja doctrine/dbal 2.9.2 próbowałem zarówno ze znacznikiem v jak i bez niego. Wyszukałem latest version doctrine/dbal jest to wersja 2.9.2 i próbowałem to zainstalować i nic. Nie mogę stworzyć tej migracji. Zarówno przez composer install, jak i composer require ... nie mam już żadnego pomysłu. Robię ten projekt na raty, ale nie mogę tego w żaden sposób ruszyć . 

 
 


C:\xampp\htdocs\laravel\laravel>composer install
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them.
Nothing to install or update
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: beyondcode/laravel-dump-server
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.

C:\xampp\htdocs\laravel\laravel>composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 0 installs, 7 updates, 0 removals
  - Updating symfony/polyfill-ctype (v1.10.0 => v1.11.0): Downloading (100%)
  - Updating symfony/polyfill-php72 (v1.10.0 => v1.11.0): Downloading (100%)
  - Updating symfony/polyfill-mbstring (v1.10.0 => v1.11.0): Downloading (100%)
  - Updating symfony/polyfill-intl-idn (v1.10.0 => v1.11.0): Downloading (100%)
  - Updating symfony/polyfill-iconv (v1.10.0 => v1.11.0): Downloading (100%)
  - Updating laravel/framework (v5.8.4 => v5.8.7): Downloading (100%)
  - Updating doctrine/instantiator (1.1.0 => 1.2.0): Downloading (100%)
Writing lock file
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: beyondcode/laravel-dump-server
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.

C:\xampp\htdocs\laravel\laravel>composer install
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Nothing to install or update
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: beyondcode/laravel-dump-server
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.

C:\xampp\htdocs\laravel\laravel>php artisan migrate
Migrating: 2019_03_21_011314_add_foreign_doctors_to_visits

   Illuminate\Database\QueryException  : SQLSTATE[HY000]: General error: 1005 Can't create table `system`.`#sql-2734_625` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table `visits` add constraint `visits_doctor_id_foreign` foreign key (`doctor_id`) references `users` (`id`))

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

  Exception trace:

  1   Doctrine\DBAL\Driver\PDOException::("SQLSTATE[HY000]: General error: 1005 Can't create table `system`.`#sql-2734_625` (errno: 150 "Foreign key constraint is incorrectly formed")")
      C:\xampp\htdocs\laravel\laravel\vendor\doctrine\dbal\lib\Doctrine\DBAL\Driver\PDOStatement.php:119

  2   PDOException::("SQLSTATE[HY000]: General error: 1005 Can't create table `system`.`#sql-2734_625` (errno: 150 "Foreign key constraint is incorrectly formed")")
      C:\xampp\htdocs\laravel\laravel\vendor\doctrine\dbal\lib\Doctrine\DBAL\Driver\PDOStatement.php:117

  Please use the argument -v to see more details.

C:\xampp\htdocs\laravel\laravel>
komentarz 22 marca 2019 przez Arkadiusz Waluk Ekspert (287,550 p.)

Przecież masz kompletnie inny błąd. Błędu o braku Doctrine DBAL już nie ma, czyli teraz jest dobrze zainstalowany.

Migrating: 2019_03_21_011314_add_foreign_doctors_to_visits

...

Illuminate\Database\QueryException  : SQLSTATE[HY000]: General error: 1005 Can't create table `system`.`#sql-2734_625` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table `visits` add constraint `visits_doctor_id_foreign` foreign key (`doctor_id`) references `users` (`id`))

Prawdopodobnie kolumna doctor_id w visits ma inny typ niż kolumna id w users. Bez kodu tych migracji ciężko powiedzieć.

komentarz 22 marca 2019 przez Grzegorz Mikina Dyskutant (8,060 p.)
Ogólnie rzecz biorąc wszyscy użytkownicy są przechowywani w jednej tabeli Users. Users był z początku BigIntem , doctor_id był intem. Nie wiem czy to do końca poprawne działanie, ale zmieniłem atrybut ręcznie. A czy doctrine/dbal nie powinien tego problemu sam rozwiązać ?
komentarz 22 marca 2019 przez Grzegorz Mikina Dyskutant (8,060 p.)
Raczej bym stawiał na jakąś literówkę w nazwie klucza obcego.
komentarz 22 marca 2019 przez Arkadiusz Waluk Ekspert (287,550 p.)
Doctrine samo niczego nie rozwiązuje, umożliwia tylko to że można zrobić ->change() w migracji, czyli zmodyfikować już istniejącą kolumnę. Jak zmieniłeś ręcznie na bazie to też może być (ale wypadałoby i poprawić w migracji, aby przy kolejnym postawieniu od zera działało).

Ja nadal będę obstawiał inne typy dla łączonych kolumn, jakby była literówka to nie mógłby ich znaleźć i komunikat byłby inny.
1
komentarz 22 marca 2019 przez Grzegorz Mikina Dyskutant (8,060 p.)
$table->integer('patient_id')->unsigned()->change(); W tym wierszu był błąd.
$table->integer('patient_id')->unsigned('')->change(); <<< ---- coś takiego było i to był jeden z problemów, drugi problem to ręczne ingerowanie w tabele w bazie danych.
Problem rązwiązano następująco. Usunąłem całą bazę danych i przeprowadziłem ponownie całą migracje.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 556 wizyt
pytanie zadane 17 września 2019 w PHP przez marta.zawisla Początkujący (260 p.)
0 głosów
1 odpowiedź 285 wizyt
pytanie zadane 19 stycznia 2019 w PHP przez kasia101 Początkujący (290 p.)
+1 głos
2 odpowiedzi 425 wizyt
pytanie zadane 18 lipca 2018 w PHP przez Wojtek85 Nowicjusz (230 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...