Silverstripe 下拉字段不显示所选的已保存值

Silverstripe drop down field does not show saved value as selected

我在 CMS 中创建了一个下拉字段,如下所示:

class ProductPage extends Page {
    //.....

    private static $has_one = [
        'TeaserImage'=>Image::Class,
        'LinkedProduct'=>'Product'
    ];

    public function getCMSFields(){
        $fields = parent::getCMSFields();

        $productLinkField = DropdownField::create('LinkedProduct', 'Link a Product', Product::get()->map('ID', 'ProductName'));
        $productLinkField->setEmptyString('(Select one)');

        $fields->addFieldToTab('Root.Main', $productLinkField, 'Content');

        return $fields;
    }
}

问题是,当我 select 一个值和 save/publish 页面时,下拉菜单返回到 "Select one" 而不是显示保存的 selection。

我没有检查数据库以查看是否存储了该值,但我认为它是。

编辑: 不是重复的。 建议的副本涉及从 CMS 中删除字段。 这个问题涉及将下拉值设置为保存的 selection.

答案却大同小异。用户必须始终将 ID 附加到 has_one 字段,以便 CMS 与其交互。

默认情况下,SilverStripe 在将 has_one 关系字段保存到数据库时将 'ID' 参数附加到它们的末尾。

因此,当您覆盖关系字段时,您需要将 'ID' 附加到字段标识符。

DropdownField::create('LinkedProductID', 'Link a Product', Product::get()->map('ID', 'ProductName'));