首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TYPO3 Extbase如何清空ObjectStorage

TYPO3 Extbase如何清空ObjectStorage
EN

Stack Overflow用户
提问于 2016-10-25 17:57:04
回答 2查看 1.8K关注 0票数 0

在更新对象时,我希望“清空”ObjectStorage:

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

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

TCA:

代码语言:javascript
复制
'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,
),
),

模型:

代码语言:javascript
复制
/**
* 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;
}

控制器:

代码语言:javascript
复制
$partner = new Tx_Extbase_Persistence_ObjectStorage();
if (count($partnerarr) > 0){
foreach($partnerarr as $p){
$partner->attach( $this->partnerRepository->findByUid($p));
}
}
$organisation = $this->organisationRepository->findByUid($uid)
$organisation->setPartner($partner);

只要ObjectStorage中有一个对象,它就能工作。所以我可以添加/删除/更改关系。但是当$partnerarr是空的,没有对象被附加,空的Tx_Extbase_Persistence_ObjectStorage被赋值时,旧的值不会被“删除”。我还试图赋值null或"“,但是出现错误是因为需要一个ObjectStorage。如果我分配空的ObjectStorage,我不会得到一个错误,但是旧的值仍然保持:

有什么想法吗?

谢谢

克里斯蒂安

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-25 18:19:07

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

代码语言:javascript
复制
/** @var \Tx_Extbase_Persistence_ObjectStorage $organisationPartners */
$organisationPartners = $organisation->getPartner();
foreach ($organisationPartners as $partner) {
   $organisationPartners->detach($partner);
}
票数 1
EN

Stack Overflow用户

发布于 2016-10-26 07:54:16

谢谢你@Wolfgang的留言。

我在我的模型中添加了以下函数:

代码语言:javascript
复制
/**
* detach Partner
*
* @param Tx_Toco3Marketingdb_Domain_Model_Partner $partner
* @return void
*/
public function detachPartner($partner) {
   $this->partner->detach($partner);
} 

在控制器中,我添加了:

代码语言:javascript
复制
$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);

在设置新的(空)值之前,必须持久化.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40246604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档