我想将我的表列设置的值设置为唯一值,如果在插入表单中我可以用来设置错误,我在数据库中插入与数据相同的值?
这是真的吗?
public function rules()
{
return [
[['nama_barang', 'harga', 'stok', 'id_satuan'], 'required'],
[['harga', 'stok', 'id_satuan'], 'integer'],
['nama_barang', 'unique', 'targetAttribute' => ['nama_barang' => 'nama_barang']],
[['foto'], 'safe']
];
}
答案 0 :(得分:10)
记住:模型,视图,控制器。
<强>模型强> 在模型规则中添加唯一验证器,如
...
[['nama_barang'], 'unique'],
...
查看强>
在表单视图中启用ajax验证
...
<?php $form = ActiveForm::begin(['enableAjaxValidation' => true]); ?>
...
<强>控制器强>
在控制器中添加ajax验证 创建行动
...
public function actionCreate()
{
$model = new Product();
if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
Yii::$app->response->format = Response::FORMAT_JSON;
return ActiveForm::validate($model);
}
if ($model->load(Yii::$app->request->post())) {
...
和更新操作
...
public function actionUpdate($id)
{
$model = $this->findModel($id);
if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
Yii::$app->response->format = Response::FORMAT_JSON;
return ActiveForm::validate($model);
}
if ($model->load(Yii::$app->request->post())) {
...
PS:如果不存在,请在控制器中添加所需的类。
use yii\web\Response;
use yii\widgets\ActiveForm;
答案 1 :(得分:5)
试试这种方式
public function rules()
{
return [
[['nama_barang', 'harga', 'stok', 'id_satuan'], 'required'],
[['harga', 'stok', 'id_satuan'], 'integer'],
['nama_barang', 'unique', 'targetAttribute' => ['nama_barang'], 'message' => 'Username must be unique.'],
[['foto'], 'safe']
];
}
答案 2 :(得分:0)
只需在规则[['name'], 'unique'],
以下是完整的功能。
public function rules()
{
return [
[['name', 'description', 'comp_id'], 'required'],
[['description'], 'string'],
[['comp_id'], 'integer'],
[['name'], 'string', 'max' => 100,],
[['name'], 'unique'],
[['comp_id'], 'exist', 'skipOnError' => true, 'targetClass' => Company::className(), 'targetAttribute' => ['comp_id' => 'comp_id']],
];
}
答案 3 :(得分:0)
我有一个类似的问题,当我插入一个带有现有唯一字段的记录时,框架保持沉默,返回我的视图,没有任何错误。 因此,解决此问题的技巧是仅当 $model->save() 的布尔值为 true 时才执行成功重定向,否则通过 view.php 渲染回 _form.php