我想知道如何正确保存使用ListboxField选择的值。
new ListboxField(
$name = "Categorie",
$title = "Catégorie(s)",
Categories::get()->map('ID','Title'),
$value = 1,
$size = 4,
$multiple = true
);
在我的示例中,我可以将多个类别保存到$db
字段。我正在使用:
private static $db = array(
'Categorie' => 'Varchar'
);
它有效,但是当我试图将类别名称归还给模板时,它根本不起作用。例如,存储的数据为"1,4,9"
。
有没有更好的方法来存储ListboxField中的变量?
答案 0 :(得分:3)
3dgoo是正确的,你最好在这里使用has_many或many_many关系。如果由于某种原因需要使用单个文本字段,则只需手动向模型添加方法以查找相关记录:
public function getCategories() {
if (empty($this->Categorie)) return null;
return Categories::get()->filter('ID', explode(',', $this->Categorie));
}
然后,您可以在模板中执行以下操作:
<% loop $Categories %><li>$Title</li><% end_loop %>
答案 1 :(得分:2)
使用$many_many
关系代替$db
变量来管理您的对象与Categories
之间的关系。
private static $many_many = array(
'Categories' => 'Categories'
);
public function getCMSFields() {
$fields = parent::getCMSFields();
$fields->addFieldToTab('Root.Main', ListboxField::create(
'Categories',
'Catégories',
Categories::get()->map('ID', 'Title')->toArray(),
1,
4,
true
));
return $fields;
}