SilverStripe 图像数据对象在创建后不可用

SilverStripe Image DataObject not available after creation

我有这段代码可以根据添加到文件系统但尚未在数据库中的新文件创建新图像:

$image = Image::create();
$image->Filename = 'assets/Art/e3434cc7-d348-491a-9dc8-325af3d9086d.jpg';
$image->write();

$images = Image::get();
$image = $images->last();

$vd = new ViewableData();
$ad = new ArrayData(array(
   'Image' => $image
));
$strHTML = $vd->customise($ad)->renderWith('Art');

Art.ss 仅包含 $Image.SetWidth(100)

忽略查询不按 ID 或其他任何方式查找的事实...如果我在创建后从数据库中检索图像,为什么图像只渲染到 $strHTML?如果我删除下面的代码,$strHTML 为空:

$images = Image::get();
$image = $images->last();

有一个 setter 可用,因此单独使用它可能会有所帮助,但您可能还需要将父文件夹的 ID 分配给对象:

$pFolder = Folder::find_or_make('Art');
if ($pFolder) {
    $image->setParentID($pFolder->ID);
    $image->setFilename('assets/Art/e3434cc7-d348-491a-9dc8-325af3d9086d.jpg');
}