gpt4 book ai didi

symfony - 在保存到数据库之前转换数据

转载 作者:行者123 更新时间:2023-12-04 23:42:37 25 4
gpt4 key购买 nike

刚刚开始使用 Symfony,所以请多多包涵。

我有一个带有字段“myField”的实体,该字段作为 ENUM 值存储在数据库中,值为“Y”或“N”。 (这是我正在使用并尝试将 symfony 作为应用程序来操作数据的旧数据库模式)

我想用打开或关闭(0 或 1)的复选框表示“myField”。保存表单后,在将其保存到数据库之前如何将值转换为适当的“Y”或“N”值?

我看了Data Transformers ,这可能是我需要去的地方,但创建一个新类和文件只是为了转换该数据似乎很愚蠢。这是一个非常简单的转换。

也许我只是更改实体上的 setMyField($myField) () {} setter 方法来转换那里的数据?同样,在 getMyField() {} 中将其转换回来?但是 Doctrine 不也使用 setter 方法吗?如果是这样,那么当 Doctrine 设置一个值时,它将是数据库中的正确值(0 或 1)并且不需要转换。但如果表单设置值,则需要转换。

这是操作代码:

public function newAction(Request $request)
{
$course = new Course();

$form = $this->createForm(new CourseForm(), $course);

$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($course);
$em->flush();

return $this->redirect($this->generateUrl('courses'));
}

return $this->render('PucsTestBundle:Course:new.html.twig', array(
'form' => $form->createView(),
));
}

我想我可以在调用 handleRequest 之前在 Controller 中自己转换数据,但这可能不是一个好的做法。

此外,我在数据库“days”中有一个字段,它只是一个 VARCHAR,类似于周一、周二和周三的 MTW。我想为所有这些值显示一个复选框,然后对表单提交进行后处理以将数据转换为适当的单一值。

最佳答案

您应该使用定义的自定义 Doctrine 类型 here in the documentation

<?php
namespace My\Project\Types;

use Doctrine\DBAL\Types\Type;
use Doctrine\DBAL\Platforms\AbstractPlatform;

/**
* My custom datatype.
*/
class OldBooleanType extends Type
{
const NAME = 'OldBoolean'; // modify to match your type name

public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
{
return 'OldBoolean';
}

public function convertToPHPValue($value, AbstractPlatform $platform)
{
if ($value === 'Y'){
return true;
}
if ($value === 'N'){
return false;
}
return null;
}

public function convertToDatabaseValue($value, AbstractPlatform $platform)
{
if ($value === true){
return 'Y';
}
if ($value === false){
return 'N';
}
return null;
}

public function getName()
{
return self::NAME;
}
}

关于symfony - 在保存到数据库之前转换数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23087684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com