TYPO3 Extbase如何清空ObjectStorage
TYPO3 Extbase how to empty ObjectStorage
我想在更新对象时"empty"一个对象存储:
它是带有 Extbase 扩展的 TYPO3 4.6,它允许您在前端 show/add/edit/delete 数据集。乍一看一切都很好。
我有一个字段引用另一个 table:
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,
),
),
型号:
/**
* 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;
}
控制器:
$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 中有一个对象,它就可以工作。这样我就可以add/delete/change关系了。但是当 $partnerarr 为空且没有对象被附加时,分配了空的 Tx_Extbase_Persistence_ObjectStorage,旧值不会得到 "deleted"。我还尝试分配 null 或 "" 但由于需要 ObjectStorage 而发生错误。如果我分配空的 ObjectStorage 我不会收到错误,但旧值仍然保持 :(
有什么想法吗?
谢谢
基督教徒
调用detach
或removeAll
方法删除存储的某些或所有对象。
/** @var \Tx_Extbase_Persistence_ObjectStorage $organisationPartners */
$organisationPartners = $organisation->getPartner();
foreach ($organisationPartners as $partner) {
$organisationPartners->detach($partner);
}
感谢@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);
在设置新(空)值之前坚持很重要...
我想在更新对象时"empty"一个对象存储:
它是带有 Extbase 扩展的 TYPO3 4.6,它允许您在前端 show/add/edit/delete 数据集。乍一看一切都很好。
我有一个字段引用另一个 table:
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,
),
),
型号:
/**
* 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;
}
控制器:
$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 中有一个对象,它就可以工作。这样我就可以add/delete/change关系了。但是当 $partnerarr 为空且没有对象被附加时,分配了空的 Tx_Extbase_Persistence_ObjectStorage,旧值不会得到 "deleted"。我还尝试分配 null 或 "" 但由于需要 ObjectStorage 而发生错误。如果我分配空的 ObjectStorage 我不会收到错误,但旧值仍然保持 :(
有什么想法吗?
谢谢
基督教徒
调用detach
或removeAll
方法删除存储的某些或所有对象。
/** @var \Tx_Extbase_Persistence_ObjectStorage $organisationPartners */
$organisationPartners = $organisation->getPartner();
foreach ($organisationPartners as $partner) {
$organisationPartners->detach($partner);
}
感谢@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);
在设置新(空)值之前坚持很重要...