如何在活动记录中使用唯一规则yii2

时间:2015-10-12 08:06:19

标签: validation yii2 unique

我想将我的表列设置的值设置为唯一值,如果在插入表单中我可以用来设置错误,我在数据库中插入与数据相同的值?

这是真的吗?

    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']
    ];
}

4 个答案:

答案 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