仍然会在除了一个的所有上下文中返回已删除的实体
我有一个Doctrine实体( FieldOption
),它表示一个表单中选择字段的单个选项(例如Red
, Green
, Blue
)。 用户在任何时候都可以选择从字段中删除选项(例如,删除Green
),为此,我已经使用Gedmo将该实体设置为可删除的,该Gedmo完美地工作。
但是,如果至少存储一次表单提交的选项被删除,则该提交实体(与FieldOption
实体有关系)无法加载,因为FieldOption
被过滤掉。 实际上,我只想在返回呈现表单的数据时发生软删除功能 - 查看链接到该实体的现有记录应该仍然能够默认加载软删除的选项。
有没有办法通过另一个实体检索时禁用此过滤器,但要确保在直接加载选项列表时启用过滤器?
Sepultura评论的链接提供了一些关于如何启用/禁用过滤器和编写自己的自定义过滤器的示例。
来自文档
示例过滤器:
<?php
namespace Example;
use DoctrineORMMappingClassMetaData,
DoctrineORMQueryFilterSQLFilter;
class MyLocaleFilter extends SQLFilter
{
public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias)
{
// Check if the entity implements the LocalAware interface
if (!$targetEntity->getReflectionClass()->implementsInterface('LocaleAware')) {
return "";
}
return $targetTableAlias.'.locale = ' . $this->getParameter('locale'); // getParameter applies quoting automatically
}
}
该文档还声明使用以下代码行添加此过滤器(以便您可以启用/禁用它):
$config->addFilter("locale", "DoctrineTestsORMFunctionalMyLocaleFilter");
然而,如果你想在任何地方使用这个过滤器,你必须把这行代码放到你想要的位置,并且还可以访问$config
(它包含来自Doctrine的Configuration
对象)。
在Zend Framework 2和3中,您可以将以下配置添加到核心/ mvc模块或应用程序配置中:
'doctrine' => [
'configuration' => [
'orm_default' => [
'filters' => [
'locale' => MyLocaleFilter::class,
],
],
],
],
上面的代码和配置行启用了此过滤器,可以在特定位置禁用,在您要禁用的位置使用以下行(每个文档(第一个启用&配置)):
<?php
$filter = $em->getFilters()->enable("locale");
$filter->setParameter('locale', 'en');
// Disable it
$filter = $em->getFilters()->disable("locale");
链接地址: http://www.djcxy.com/p/65041.html