📜  symfony 向实体添加字段 - PHP (1)

📅  最后修改于: 2023-12-03 15:05:26.862000             🧑  作者: Mango

Symfony 向实体添加字段

Symfony 是一个 PHP 的 Web 开发框架,这个框架提供了一个强大的 Entity 组件。它可以通过 Doctrine ORM 帮助开发者与数据库进行交互,其中包括向实体添加字段。

添加字段的步骤
  1. 在主要的实体类中添加新字段

要在实体类中添加新字段,只需在 PHP 类中定义其属性即可。例如:

<?php

// src/Entity/Product.php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\ProductRepository")
 */
class Product
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

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

    /**
     * @ORM\Column(type="integer")
     */
    private $price;

    // 新字段
    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     */
    private $description;

    // Getters and Setters 略

}

如上代码,想要向 Product 实体添加 description 字段,只需要在 Product 类中添加 private $description;

执行数据库迁移

当添加或修改实体字段时,仅仅在 PHP 类中定义属性并不足够,还需要通过 Doctrine 等 ORM 工具来执行数据库迁移。

在 Symfony 中,执行数据库迁移可以使用以下命令:

php bin/console make:migration
php bin/console doctrine:migrations:migrate

第一个命令会生成一个迁移文件,它是一个 PHP 文件,其中包含了必要的 SQL 语句,用于处理数据库结构的变化。第二个命令会将该文件中的所有 SQL 语句运行在数据库中。

修改实体并更新数据库

如果您已经修改了实体类,例如将 $description 字段添加到 Product 实体中。还需要使用命令行工具完成更新。假定更新的字段已经在 src/Entity/Product.php 文件中指定:

  1. 生成并对比数据库迁移

    运行 php bin/console make:migration 命令将生成一个迁移文件,其名称类似于 src/Migrations/Version######.php

  2. 执行迁移

    运行 php bin/console doctrine:migrations:migrate 命令将会把新字段添加到数据库中。

    请注意,如果未使用 --no-interaction 选项,则在运行 doctrine:migrations:migrate 命令时将需要确认。这是为了避免意外或意想不到的数据库表的修改。

更新 Doctrine 存储库

假设实体仓库被命名为 ProductRepository,以下是对于 ProductRepository 存储库的更新:

  1. 添加新的 setDescription() 方法:

     /**
      * Set product description.
      *
      * @param string $description
      */
     public function setDescription($description)
     {
         $this->description = $description;
     }
    
  2. 更新控制器,以使用新的 setDescription() 方法:

    // ...
    
    // 实例化 Product 对象
    $product = new Product();
    
    // 添加其他的属性
    $product->setName('新产品');
    $product->setPrice(99.99);
    $product->setDescription('这是新产品的描述!');
    
    // 保存到数据库中
     $entityManager = $this->getDoctrine()->getManager();
     $entityManager->persist($product);
     $entityManager->flush();
    

这样,就可以向 Product 实体中添加新的(或更新的)字段了。

总结

在 Symfony 中向 Entity 添加字段需要注意以下步骤:

  1. 修改实体类,添加属性。
  2. 执行数据库迁移,将修改应用到数据库中。
  3. 更新您的存储库,以便在控制器等其他地方使用。

参考: