【发布时间】:2019-04-24 12:50:26
【问题描述】:
此时,我不确定问题出在教义上还是 symfony 上。
我有一个名为 Field 的实体。它有一个属性 dataTable 和常用的 getter 和 setter 方法。在我的一个支持类中,我使用 setter 方法将 dataTable 更改为临时值。我从不在这个类或调用它的控制器中调用persist。但是,我发现数据库正在使用这个临时值进行更新。
如果需要,我可以添加一个虚拟属性并使用它,但我认为如果我可以避免这种情况,代码会更简洁。我怎样才能确保教义只保留我明确告诉它的东西?
实体映射:
type: entity
gedmo:
soft_deleteable:
field_name: deletedAt
time_aware: false
id:
id:
type: integer
generator:
strategy: auto
fields:
name:
type: string
sortorder:
type: integer
dataTable:
type: string
type:
type: string
columnAdded:
type: boolean
deletedAt:
type: date
nullable: true
manyToOne:
section:
targetEntity: Domain\Model\Section
inversedBy: fields
oneToMany:
fieldOptions:
targetEntity: FieldOption
mappedBy: field
oneToOne:
zmrList:
targetEntity: Domain\Model\ZmrList
相关控制器代码:(永远不会为控制器中的任何内容调用 Persist)
$columns = $this->queryBuilder->getListColumns($list);
$filters = $this->queryBuilder->composeListFilters($list);
$query = $this->queryBuilder->build($columns, $filters, $list->getForm()->getId(), $instanceId);
QueryBuilder中的相关代码:
foreach ($details['columns'] as $k=>$layerColumn) {
$this->columns[$layerColumn]->getField()->setDataTable('table_'.$alias);
}
设置函数:
/**
* @param string $dataTable
*/
public function setDataTable(string $dataTable): void
{
$this->dataTable = $dataTable;
}
【问题讨论】:
-
能给个映射码吗?执行相关实体修改的控制器和代码?
-
我确信只有在使用 **flush()** 时数据库才会更新,因此请调试您的代码并查看您是否在某处刷新实体
-
flush将所做的更改写入任何个托管实体。 “临时”更改托管实体的值是不干净的,它是脏的。我真的会使用临时字段或重新评估方法。 -
@Jakumi,谢谢。如果您想将此作为答案发布,我会接受它
-
@AmyAnuszewski 其实是可以的,我刚刚加了一个答案。