瀏覽代碼

Mise à jour BDD pour roles en format JSON

Sangfroid 8 月之前
父節點
當前提交
3f9632e48d
共有 2 個文件被更改,包括 74 次插入12 次删除
  1. 61 0
      migrations/Version20240803144323.php
  2. 13 12
      src/Entity/User.php

+ 61 - 0
migrations/Version20240803144323.php

@@ -0,0 +1,61 @@
+<?php
+
+declare(strict_types=1);
+
+namespace DoctrineMigrations;
+
+use Doctrine\DBAL\Schema\Schema;
+use Doctrine\Migrations\AbstractMigration;
+
+/**
+ * Auto-generated Migration: Please modify to your needs!
+ */
+final class Version20240803144323 extends AbstractMigration
+{
+    public function getDescription(): string
+    {
+        return '';
+    }
+
+    public function up(Schema $schema): void
+    {
+        $this->addSql('
+            ALTER TABLE user MODIFY roles LONGTEXT
+        ');
+
+        // Fetch all users to update their roles
+        $users = $this->connection->fetchAllAssociative('SELECT id, roles FROM user');
+        
+        foreach ($users as $user) {
+            $roles = unserialize($user['roles']);
+            $jsonRoles = json_encode($roles);
+            $this->addSql('UPDATE user SET roles = ? WHERE id = ?', [$jsonRoles, $user['id']]);
+        }
+
+        $this->addSql('
+            ALTER TABLE user MODIFY roles JSON
+        ');
+        // this up() migration is auto-generated, please modify it to your needs
+        $this->addSql('ALTER TABLE user CHANGE roles roles JSON NOT NULL');
+        // Convert the roles column data from longtext to JSON
+    }
+
+    public function down(Schema $schema): void
+    {
+        // this down() migration is auto-generated, please modify it to your needs
+        // Reverse the conversion if necessary
+        $users = $this->connection->fetchAllAssociative('SELECT id, roles FROM user');
+        
+        foreach ($users as $user) {
+            $roles = json_decode($user['roles'], true);
+            $serializedRoles = serialize($roles);
+            $this->addSql('UPDATE user SET roles = ? WHERE id = ?', [$serializedRoles, $user['id']]);
+        }
+
+        $this->addSql('
+            ALTER TABLE user MODIFY roles LONGTEXT
+        ');
+
+        $this->addSql('ALTER TABLE user CHANGE roles roles LONGTEXT NOT NULL COMMENT \'(DC2Type:array)\'');
+    }
+}

+ 13 - 12
src/Entity/User.php

@@ -4,6 +4,7 @@ namespace App\Entity;
 
 use App\Repository\UserRepository;
 use Doctrine\Common\Collections\Collection;
+use Doctrine\DBAL\Types\Types;
 use Doctrine\ORM\Mapping as ORM;
 use Symfony\Component\Security\Core\User\UserInterface;
 use Symfony\Component\Validator\Constraints as Assert;
@@ -24,38 +25,38 @@ class User implements UserInterface,PasswordAuthenticatedUserInterface
     #[ORM\GeneratedValue(strategy: "AUTO")]
     private ?int $id = null;
 
-    #[ORM\Column(name: "username", type: "string", length: 191, unique: true)]
+    #[ORM\Column(name: "username", type: Types::STRING, length: 191, unique: true)]
     private ?string $username = null;
 
-    #[ORM\Column(name: "prenom", type: "string", length: 191, nullable: true)]
+    #[ORM\Column(name: "prenom", type: Types::STRING, length: 191, nullable: true)]
     private ?string $prenom = null;
 
-    #[ORM\Column(name: "nom", type: "string", length: 191, nullable: true)]
+    #[ORM\Column(name: "nom", type: Types::STRING, length: 191, nullable: true)]
     private ?string $nom = null;
 
-    #[ORM\Column(name: "mail", type: "string", length: 191, unique: true)]
+    #[ORM\Column(name: "mail", type: Types::STRING, length: 191, unique: true)]
     #[Assert\Email()]
     private ?string $mail = null;
 
-    #[ORM\Column(name: "password", type: "string", length: 191)]
+    #[ORM\Column(name: "password", type: Types::STRING, length: 191)]
     private ?string $password = null;
 
-    #[ORM\Column(name: "token", type: "string", length: 191, unique: true)]
+    #[ORM\Column(name: "token", type: Types::STRING, length: 191, unique: true)]
 
     private ?string $token = null;
 
-    #[ORM\Column(name: "token_validity", type: "datetime")]
+    #[ORM\Column(name: "token_validity", type: Types::DATETIME_MUTABLE)]
     #[Assert\Type("DateTime")]
     private ?\DateTimeInterface $tokenValidity = null;
 
-    #[ORM\Column(name: "salt", type: "string", length: 191, nullable: true)]
+    #[ORM\Column(name: "salt", type: Types::STRING, length: 191, nullable: true)]
     private ?string $salt = null;
 
-    #[ORM\Column(name: "is_active", type: "boolean")]
+    #[ORM\Column(name: "is_active", type: Types::BOOLEAN)]
     private ?bool $isActive = null;
 
-    #[ORM\Column(name: "roles", type: "array")]
-    private ?array $roles = array();
+    #[ORM\Column(name: "roles")]
+    private ?array $roles = [];
 
     #[ORM\ManyToMany(targetEntity: Film::class, mappedBy: "usersWantToView")]
     private ?Collection $films = null;
@@ -66,7 +67,7 @@ class User implements UserInterface,PasswordAuthenticatedUserInterface
     #[ORM\OneToOne(targetEntity: Profile::class, mappedBy: "user", cascade: ["persist", "remove"])]
     private ?Profile $profile = null;
 
-    #[ORM\Column(name: "last_activity", type: "datetime")]
+    #[ORM\Column(name: "last_activity", type: Types::DATETIME_MUTABLE)]
     #[Assert\Type("DateTime")]
     private ?\DateTimeInterface $lastActivity = null;