首页 文章

TYPO3 Extbase如何清空ObjectStorage

提问于
浏览
0

我想在更新Object时“清空”ObjectStorage:

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

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

TCA:

'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,
),
),

Model:

/**
* 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;
}

Controller:

$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中有一个Object,这就可以正常工作 . 所以我可以添加/删除/更改关系 . 但是当$ partnerarr为空时,没有对象被附加,则分配空Tx_Extbase_Persistence_ObjectStorage,旧值不会被“删除” . 我也尝试分配null或“”但是发生错误,因为需要ObjectStorage . 如果我分配空的ObjectStorage我没有收到错误,但旧值仍然保持:(

任何的想法?

谢谢

基督教

2 回答

  • 1

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

    /** @var \Tx_Extbase_Persistence_ObjectStorage $organisationPartners */
    $organisationPartners = $organisation->getPartner();
    foreach ($organisationPartners as $partner) {
       $organisationPartners->detach($partner);
    }
    
  • 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);
    

    在设置新(空)值之前保持持久是很重要的......

相关问题