Yii2 Kartik Select2 多个标签输入字符串错误
Yii2 Kartik Select2 Multiple Tags Input String Error
我使用 Select2 小部件将选定的标签输入存储到 MySQL 数据库。我希望 010102, 010103, 010299
之类的东西存储在数据库 table.
中
这里是view.php
echo $form->field($model, 'SpField')->label(false)->widget(Select2::className(), [
'data' => ArrayHelper::map(Supplierfield::find()->all(), 'sfCode', 'sfCode'),
'options' => [
'multiple' => true,
'placeholder' => 'Choose tag ...',
],
'pluginOptions' => [
'tags' => true
]
]);
更新:这是模型上的相应规则
public function rules()
{
return [
[['spCode', 'SpName','SpPhone', 'SpEmail', 'SpAddress', 'SpPostcode', 'SpTown', 'SpState', 'SpDistrict','SpBumi', 'SpStatus'], 'required'],
[['RecordStamp','SpField'], 'safe'],
[['spCode'], 'string', 'max' => 7],
[['SpName', 'SpEmail'], 'string', 'max' => 50],
[['SpPhone'], 'string', 'max' => 20],
[['SpAddress'], 'string', 'max' => 100],
[['SpPostcode'], 'string', 'max' => 5],
[['SpTown', 'SpState'], 'string', 'max' => 30],
[['SpBumi', 'SpStatus'], 'string', 'max' => 15],
[['SpDistrict'], 'string', 'max' => 50],
[['spbalance','spfloatbalance'], 'number'],
[['SpField'], 'string', 'max' => 255, 'message' => 'Field must be a string'],
[['spCode'], 'unique'],
];
}
但是,为什么我会收到此错误。它说输入字段必须是一个字符串。
仅供参考:SpField
是 varchar(255) 的字段,sfCode
是 varchar(10) 的字段。
非常感谢任何帮助。
这是我按照@HasiburRahman 的建议所做的。
1。消除模型Supplier
中的字符串验证规则,因为小部件输入是数组形式而不是字符串。
[['SpField'], 'string', 'max' => 255, 'message' => 'Field must be a string'],
2。使用 json_encode()
将输入转换为字符串并将其保存在控制器中。
if ($model->load(Yii::$app->request->post()) && $model->save())
{
$model->SpField = json_encode(Yii::$app->request->post( 'Supplier' )['SpField']); //convert the array into string
$model->save();
}
You may use json_decode()
to convert it back to array to display $data
using the Select2 widget. In my case
it look something like this $data = json_decode($model->SpField);
对于像我这样的新手来说,这个效果很好。希望这对其他人也有帮助。
用逗号值和空格分解输入
", "
用于查询数据库。
public function actionCreateOrUpdate($id)
{
$model = $this->findModel($id);
if ($model->load(Yii::$app->request->post())) {
$model->SpField = implode (", ",$model->SpField);
$model->save();
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('create_or_update', [
'model' => $model,
]);
}
}
我使用 Select2 小部件将选定的标签输入存储到 MySQL 数据库。我希望 010102, 010103, 010299
之类的东西存储在数据库 table.
这里是view.php
echo $form->field($model, 'SpField')->label(false)->widget(Select2::className(), [
'data' => ArrayHelper::map(Supplierfield::find()->all(), 'sfCode', 'sfCode'),
'options' => [
'multiple' => true,
'placeholder' => 'Choose tag ...',
],
'pluginOptions' => [
'tags' => true
]
]);
更新:这是模型上的相应规则
public function rules()
{
return [
[['spCode', 'SpName','SpPhone', 'SpEmail', 'SpAddress', 'SpPostcode', 'SpTown', 'SpState', 'SpDistrict','SpBumi', 'SpStatus'], 'required'],
[['RecordStamp','SpField'], 'safe'],
[['spCode'], 'string', 'max' => 7],
[['SpName', 'SpEmail'], 'string', 'max' => 50],
[['SpPhone'], 'string', 'max' => 20],
[['SpAddress'], 'string', 'max' => 100],
[['SpPostcode'], 'string', 'max' => 5],
[['SpTown', 'SpState'], 'string', 'max' => 30],
[['SpBumi', 'SpStatus'], 'string', 'max' => 15],
[['SpDistrict'], 'string', 'max' => 50],
[['spbalance','spfloatbalance'], 'number'],
[['SpField'], 'string', 'max' => 255, 'message' => 'Field must be a string'],
[['spCode'], 'unique'],
];
}
但是,为什么我会收到此错误。它说输入字段必须是一个字符串。
仅供参考:SpField
是 varchar(255) 的字段,sfCode
是 varchar(10) 的字段。
非常感谢任何帮助。
这是我按照@HasiburRahman 的建议所做的。
1。消除模型Supplier
中的字符串验证规则,因为小部件输入是数组形式而不是字符串。
[['SpField'], 'string', 'max' => 255, 'message' => 'Field must be a string'],
2。使用 json_encode()
将输入转换为字符串并将其保存在控制器中。
if ($model->load(Yii::$app->request->post()) && $model->save())
{
$model->SpField = json_encode(Yii::$app->request->post( 'Supplier' )['SpField']); //convert the array into string
$model->save();
}
You may use
json_decode()
to convert it back to array to display$data
using the Select2 widget. In my case it look something like this$data = json_decode($model->SpField);
对于像我这样的新手来说,这个效果很好。希望这对其他人也有帮助。
用逗号值和空格分解输入
", "
用于查询数据库。
public function actionCreateOrUpdate($id)
{
$model = $this->findModel($id);
if ($model->load(Yii::$app->request->post())) {
$model->SpField = implode (", ",$model->SpField);
$model->save();
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('create_or_update', [
'model' => $model,
]);
}
}