• 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

0 głosów
537 wizyt
pytanie zadane 2 czerwca 2018 w PHP, Symfony, Zend przez `Krzychuu Stary wyjadacz (12,630 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 (32,750 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 (12,630 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 (32,750 p.)
Pokaż mi ten sql, który chcesz wykonać.
komentarz 2 czerwca 2018 przez `Krzychuu Stary wyjadacz (12,630 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 (32,750 p.)
Wejdź do pliku (src/Migrations/Twoja ostatnia wersja) i pokaż wnętrze metody up()
komentarz 2 czerwca 2018 przez `Krzychuu Stary wyjadacz (12,630 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 (32,750 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 (12,630 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 (32,750 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 (12,630 p.)
dziękuje za pomoc :)
komentarz 2 czerwca 2018 przez Bosswell Nałogowiec (32,750 p.)
Proszę bardzo ;)

Podobne pytania

0 głosów
0 odpowiedzi 20 wizyt
pytanie zadane 7 kwietnia w PHP, Symfony, Zend przez hiper007 Stary wyjadacz (10,860 p.)
0 głosów
1 odpowiedź 73 wizyt
pytanie zadane 11 lipca 2018 w PHP, Symfony, Zend przez suice Gaduła (3,400 p.)
0 głosów
1 odpowiedź 94 wizyt
Porady nie od parady
Możesz ukryć, zamknąć lub zmodyfikować swoje pytanie, za pomocą przycisków znajdujących się pod nim. Nie krępuj się poprawić pochopnie opublikowanego pytania czy zamknąć go po uzyskaniu satysfakcjonującej odpowiedzi. Umożliwi to zachowanie porządku na forum.Przyciski pytania

64,180 zapytań

110,580 odpowiedzi

231,742 komentarzy

46,956 pasjonatów

Przeglądających: 263
Pasjonatów: 16 Gości: 247

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...