如何在持久化 Doctrine 实体时自动 trim 字符串?
How to automatically trim string when persisting a Doctrine entity?
假设我有这个实体:
use App\Repository\CategoryRepository;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass=CategoryRepository::class)
*/
class MyEntity
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private ?int $id = null;
/**
* @ORM\Column(type="string", length=255)
*/
private ?string $name = null;
// getter setters ...
}
我的控制器:
class MyController extends AbstractController
{
public function __invoke(EntityManagerInterface $em)
{
$myEntity = new MyEntity();
$myEntity->setName(' awesome name ');
$em->persist($myEntity);
$em->flush();
}
}
我希望学说将 myEntity
的 name
注册为 awesome name
而不是 awesome name
。
有没有办法配置学说来做到这一点?
您不需要以任何方式“配置学说”。只需使用 PHP 并在您的实体中引入逻辑:
class MyEntity {
// ... rest of the class implementation
public function setName(?string $name): void {
$this->name = $name === null ? $name : trim($name);
}
}
这样您的数据将处于一致状态然后您将其保存在数据库中。
假设我有这个实体:
use App\Repository\CategoryRepository;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass=CategoryRepository::class)
*/
class MyEntity
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private ?int $id = null;
/**
* @ORM\Column(type="string", length=255)
*/
private ?string $name = null;
// getter setters ...
}
我的控制器:
class MyController extends AbstractController
{
public function __invoke(EntityManagerInterface $em)
{
$myEntity = new MyEntity();
$myEntity->setName(' awesome name ');
$em->persist($myEntity);
$em->flush();
}
}
我希望学说将 myEntity
的 name
注册为 awesome name
而不是 awesome name
。
有没有办法配置学说来做到这一点?
您不需要以任何方式“配置学说”。只需使用 PHP 并在您的实体中引入逻辑:
class MyEntity {
// ... rest of the class implementation
public function setName(?string $name): void {
$this->name = $name === null ? $name : trim($name);
}
}
这样您的数据将处于一致状态然后您将其保存在数据库中。