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

Doctrine problem z utworzeniem tabeli user symfony4

VPS Starter Arubacloud
0 głosów
1,104 wizyt
pytanie zadane 2 czerwca 2018 w PHP przez `Krzychuu Stary wyjadacz (13,940 p.)

Witam

Robię system logowania przy użyciu dokumentacji symfony, próbuje dodać nową tablę do bazy danych ale przy wykonywaniu komendy "php bin.console doctrine:migrations:migrate" wyskakuję błąd, nawet gdy przekopiuje całość skryptu z dokumentacji wyskakuje ten sam błąd

In PDOConnection.php line 107:

  SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
 

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;

/**
 * @ORM\Table(name="app_users")
 * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
 */
class User implements UserInterface, \Serializable
{
    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=25, unique=true)
     */
    private $username;

    /**
     * @ORM\Column(type="string", length=254)
     */
    private $password;

    /**
     * @ORM\Column(type="string", length=254, unique=true)
     */
    private $email;

    /**
     * @ORM\Column(type="string", length=40)
     */
    private $roles;

    public function getId()
    {
        return $this->id;
    }

    public function getUsername()
    {
        return $this->username;
    }

    public function setUsername($username)
    {
        $this->username = $username;
    }

    public function getPassword()
    {
        return $this->password;
    }

    public function setPassword($password)
    {
        $this->password = $password;
    }

    public function getEmail()
    {
        return $this->email;
    }

    public function setEmail($email)
    {
        $this->email = $email;
    }

    public function getRoles()
    {
        return $this->roles;
    }

    public function setRoles($roles)
    {
        $this->roles = $roles;
    }

    public function getSalt()
    {
        return null;
    }

    public function eraseCredentials()
    {
    }

    /** @see \Serializable::serialize() */
    public function serialize()
    {
        return serialize(array(
            $this->id,
            $this->username,
            $this->password,
            // see section on salt below
            // $this->salt,
        ));
    }

    /** @see \Serializable::unserialize() */
    public function unserialize($serialized)
    {
        list (
            $this->id,
            $this->username,
            $this->password,
            // see section on salt below
            // $this->salt
            ) = unserialize($serialized, ['allowed_classes' => false]);
    }
}

 

1 odpowiedź

+1 głos
odpowiedź 2 czerwca 2018 przez Bosswell Nałogowiec (36,470 p.)
wybrane 2 czerwca 2018 przez `Krzychuu
 
Najlepsza

Problem jest z twoją bazą danych. Masz za stara wersje na Symfony 4. Jeżeli podglądniesz zapytanie sql które chcesz wykonać (znajdziesz je w migracjach) to zobaczysz, fragment

 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci 

Jeżeli wykasujesz ten fragment, to powinno działać. Ale radzę ściągnąć najnowszą wersje serwera MySQL

komentarz 2 czerwca 2018 przez `Krzychuu Stary wyjadacz (13,940 p.)
a da się oddzielnie na xamppie zainstalować mysql, bo pobrałem najnowszą wersję xampp i nadal to samo
1
komentarz 2 czerwca 2018 przez Bosswell Nałogowiec (36,470 p.)
Pokaż mi ten sql, który chcesz wykonać.
komentarz 2 czerwca 2018 przez `Krzychuu Stary wyjadacz (13,940 p.)
mam utworzony w entity plik user.php i najpierw wykonuje

php bin/console doctrine:migrations:diff

potem wykonuje

php bin/console doctrine:migrations:migrate

i wyskakuje ten błąd który napisałem w temacie :/
2
komentarz 2 czerwca 2018 przez Bosswell Nałogowiec (36,470 p.)
Wejdź do pliku (src/Migrations/Twoja ostatnia wersja) i pokaż wnętrze metody up()
komentarz 2 czerwca 2018 przez `Krzychuu Stary wyjadacz (13,940 p.)

wpisałem frazę COLLATE w consoli która jest wbudowana w phpstrom (tam wykonuje te polecenia) i wyskoczyło COLLATE utf8mb4_unicode_ci

 

        $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.');

        $this->addSql('CREATE TABLE app_users (id INT AUTO_INCREMENT NOT NULL, username VARCHAR(25) NOT NULL, password VARCHAR(254) NOT NULL, email VARCHAR(254) NOT NULL, roles VARCHAR(40) NOT NULL, UNIQUE INDEX UNIQ_C2502824F85E0677 (username), UNIQUE INDEX UNIQ_C2502824E7927C74 (email), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB');

 

1
komentarz 2 czerwca 2018 przez Bosswell Nałogowiec (36,470 p.)

Otóż to. Teraz możesz zastąpić ten fragment

CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci 

Tym

CHARACTER SET utf8 COLLATE utf8_unicode_ci

 

komentarz 2 czerwca 2018 przez `Krzychuu Stary wyjadacz (13,940 p.)
dziękuje działa, mogę coś zrobić żeby nie zmieniać za każdym razem tej linikji?
1
komentarz 2 czerwca 2018 przez Bosswell Nałogowiec (36,470 p.)

Tak. Wejdź do pliku config/packages/doctrine.yaml

i zamień sekcje z doctrine na

doctrine:
    dbal:
        charset: utf8
        default_table_options:
            charset: utf8
            collate: utf8_unicode_ci

 

komentarz 2 czerwca 2018 przez `Krzychuu Stary wyjadacz (13,940 p.)
dziękuje za pomoc :)
komentarz 2 czerwca 2018 przez Bosswell Nałogowiec (36,470 p.)
Proszę bardzo ;)

Podobne pytania

0 głosów
0 odpowiedzi 99 wizyt
pytanie zadane 7 kwietnia 2019 w PHP przez hiper007 Stary wyjadacz (11,270 p.)
0 głosów
1 odpowiedź 168 wizyt
pytanie zadane 11 lipca 2018 w PHP przez suice Gaduła (3,960 p.)
0 głosów
2 odpowiedzi 391 wizyt
pytanie zadane 6 marca 2019 w PHP przez bromba Nowicjusz (180 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 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!

...