web-dev-qa-db-ja.com

アクティブレコードyii2で一意のルールを使用する方法

テーブル列の値を一意の値として設定したいのですが、挿入形式でデータベースのデータと同じ値を挿入した場合、どのようにエラーを設定できますか?

本当ですか?

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

覚えておいてください:モデル、ビュー、コントローラー。

モデル次のようなモデルルールに一意のバリデーターを追加します

...
 [['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;
10
Diego Betto

この方法を試してください

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

ルールで一意に設定するだけです[['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']],
        ];
    }
0