Db::fixFileReferencesForModel()
\nn\t3::Db()->fixFileReferencesForModel($model);
"Repariert" die SysFileReferences für Modelle, die eine Property haben,
die statt einer ObjectStorage<FileReference> nur eine FileReference
referenzieren. Zum aktuellen Zeitpunkt ist es unklar, weshalb TYPO3 diese zwar
in der Tabelle sys_file_reference persistiert, aber das Feld tablenames
leert – bzw. uid_foreign nicht setzt. Bei einer ObjectStorage<FileReference>
tritt das Problem nicht auf.
// muss direkt nach dem persistieren des Models passieren
\nn\t3::Db()->fixFileReferencesForModel( $model );
Copied!
Source Code
public function fixFileReferencesForModel( $model )
{
$props = \nn\t3::Obj()->getProps( $model );
$modelTableName = \nn\t3::Obj()->getTableName( $model );
foreach ($props as $field=>$prop) {
if (is_a($prop, \TYPO3\CMS\Extbase\Domain\Model\FileReference::class, true)) {
$sysFile = \nn\t3::Obj()->get($model, $field);
if (!$sysFile) continue;
$resource = $sysFile->getOriginalResource();
$uid = $resource->getUid();
if (!$uid) {
$result = $this->insert($sysFile);
$uid = $result->getUid();
}
if (!$resource) continue;
$uidForeign = $resource->getProperty('uid_foreign');
$tableName = $resource->getProperty('tablenames');
if (!$uidForeign || !$tableName) {
$this->update('sys_file_reference', [
'uid_foreign' => $model->getUid(),
'tablenames' => $modelTableName,
], $uid);
}
}
}
}
Copied!