TYPO3 Extbase如何清空ObjectStorage

时间:2016-10-25 17:57:04

标签: typo3 object-storage

我想"空"更新对象时的ObjectStorage:

带有Extbase扩展的TYPO3 4.6允许您在前端显示/添加/编辑/删除数据集。乍一看,一切都很好看。

我有一个字段引用另一个表:

TCA

<xs:complexType name="elementTypeWithKeyRef">
  <xs:attribute name="theKeyRef" type="xs:string"/>
</xs:complexType> 

型号:

'partner' => array(
'exclude' => 0,
'label' => 'LLL:EXT:toco3_marketingdb/Resources/Private/Language/locallang_db.xlf:tx_toco3marketingdb_domain_model_firma.partner',
'config' => array(
'type' => 'select',
'size' => 5,
'foreign_table' => 'tx_toco3marketingdb_domain_model_partner',
'foreign_table_where' => 'ORDER BY tx_toco3marketingdb_domain_model_partner.partnerpkey',
'minitems' => 0,
'maxitems' => 20,
),
),

控制器:

/**
* Partner
*
* @var Tx_Extbase_Persistence_ObjectStorage<Tx_Toco3Marketingdb_Domain_Model_Partner>
* @lazy
*/
protected $partner;
/**
* Sets the partner
*
* @param Tx_Extbase_Persistence_ObjectStorage<Tx_Toco3Marketingdb_Domain_Model_Partner> $partner
* @return void
*/
public function setPartner(Tx_Extbase_Persistence_ObjectStorage $partner) {
$this->partner = $partner;
}

只要ObjectStorage中有一个Object,这就可以正常工作。所以我可以添加/删除/更改关系。但是当$ partnerarr为空时,没有任何对象被附加,分配了空的Tx_Extbase_Persistence_ObjectStorage,旧的值没有被删除&#34;。我也试图分配null或&#34;&#34;但是由于需要ObjectStorage而发生错误。如果我指定空的ObjectStorage,我不会收到错误,但旧的值仍然保留:(

有什么想法吗?

谢谢

基督教

2 个答案:

答案 0 :(得分:1)

调用detachremoveAll方法删除存储的某些或所有对象。

/** @var \Tx_Extbase_Persistence_ObjectStorage $organisationPartners */
$organisationPartners = $organisation->getPartner();
foreach ($organisationPartners as $partner) {
   $organisationPartners->detach($partner);
}

答案 1 :(得分:0)

感谢@Wolfgang的留言。

我在模型中添加了以下功能:

/**
* detach Partner
*
* @param Tx_Toco3Marketingdb_Domain_Model_Partner $partner
* @return void
*/
public function detachPartner($partner) {
   $this->partner->detach($partner);
} 

在控制器中我添加了:

$persistanceManager = t3lib_div::makeInstance('Tx_Extbase_Persistence_Manager');
 $organisation = $this->firmaRepository->findByUid($uid);

$organisationPartners = $organisation->getPartner();
 foreach ($organisationPartners as $organisationPartner) {
     $organisation->detachPartner($organisationPartner);
 }
 $persistanceManager->persistAll();

 $organisation->setPartner($partner);

在设置新(空)值之前保持这一点非常重要......