SilverStripe 3.1 ListboxField 保存数组到数据库
SilverStripe 3.1 ListboxField save array to database
我想知道如何正确保存使用 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 的变量?
使用 $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;
}
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 %>
我想知道如何正确保存使用 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 的变量?
使用 $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;
}
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 %>