0

オブジェクトを更新するときに ObjectStorage を「空」にしたい:

これは、フロントエンドでデータセットを表示/追加/編集/削除できる Extbase 拡張機能を備えた TYPO3 4.6 です。一見、すべてが良さそうに見えます。

別のテーブルを参照する 1 つのフィールドがあります。

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 にオブジェクトがある限り機能します。だから私は関係を追加/削除/変更することができます。ただし、$partnerarr が空でオブジェクトがアタッチされず、空の Tx_Extbase_Persistence_ObjectStorage が割り当てられている場合、古い値は「削除」されません。また、null または "" を割り当てようとしましたが、ObjectStorage が必要であるため、エラーが発生します。空の ObjectStorage を割り当ててもエラーは発生しませんが、古い値は引き続き維持されます :(

何か案が?

ありがとうございました

キリスト教徒

4

2 に答える 2

1

detachまたはメソッドを呼び出してremoveAll、ストレージの特定のオブジェクトまたはすべてのオブジェクトを削除します。

/** @var \Tx_Extbase_Persistence_ObjectStorage $organisationPartners */
$organisationPartners = $organisation->getPartner();
foreach ($organisationPartners as $partner) {
   $organisationPartners->detach($partner);
}
于 2016-10-25T18:19:07.743 に答える