2017-09-08 14 views
0

これは簡単ですが、私はそれを行うにはあまりにも愚かであるようです。私は、 "cv"と呼ばれるフィールドをfe_usersに追加して、pdfファイルをアップロードしました。私FrontendUserモデルでは、次のようになります。TYPO3 8 with extbase:remove FileReference

/** 
* @var \TYPO3\CMS\Extbase\Domain\Model\FileReference 
* @cascade remove 
*/ 
protected $cv; 

ファイルをアップロードすると、魔法のように動作しますが、私は部品でhttps://github.com/helhum/upload_exampleからスクリプトを使用していました。

唯一の問題は、そのようなファイルを削除するか、むしろsys_fileとユーザーとの間の接続を削除することです。フォームを送信し、チェックボックスをチェックした後、私はこれを行うことを試みた:私は、バックエンドを見ている場合、ページのリロードの後

$user->setCv(null); 
$user->setEdited(new \DateTime()); 
$this->frontendUserRepository->update($user); 
$persistenceManager->persistAll(); 

を、CVファイルがまだ「編集済み」ユーザーに添付(ただしれました現在の日時に正しく設定されている)。私はこれを理解していません。どうすればFileReferenceの値をnullに設定できますか?

答えて

0

モデルを確認してください。 FileReferencesはM:Nの関係で格納されます。 __constructorで初期化して

/** 
* cv 
* 
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> 
* @cascade remove 
*/ 
protected $cv = null; 

:だから、あなたのモデルでfolling宣言を使用する必要があります

public function __construct() 
{ 
    $this->cv = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); 
} 

今、あなたはObjectStorageであなたのFileReferenceを持っています。私はメートルでそれらを保存する場合

$user->removeCv(new \TYPO3\CMS\Extbase\Persistence\ObjectStorage()); 
$user->setEdited(new \DateTime()); 
$this->frontendUserRepository->update($user); 
$persistenceManager->persistAll(); 
+0

:あなたはnew \TYPO3\CMS\Extbase\Persistence\ObjectStorage()cvを設定することができ、すべてのFileReferencesクリアするには、Nの関係を、プロパティでフォームを作成することは可能でしょうか?もしそうなら、どう? – Chi

+0

これらはm:nの関係で格納されています。これは 'sys_file_reference'テーブルの' TCA'で定義されているので、1:1を使用するように変更する必要はありません。 'ObjectStorage'にファイルを追加したい場合、' ObjectStorage-> attach($ file) 'を使うことができます。 m:n関係が不要な場合は、代わりに 'TYPO3 \ CMS \ Core \ Resource \ File'を使用することができます。 –

+0

CVがユーザーごとに1つのファイルしかない場合、彼はなぜObejctStorageを使用しますか? – j4k3