テーブル列の値を一意の値として設定したいのですが、挿入形式でデータベースのデータと同じ値を挿入した場合、どのようにエラーを設定できますか?
本当ですか?
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']
];
}
覚えておいてください:モデル、ビュー、コントローラー。
モデル次のようなモデルルールに一意のバリデーターを追加します
...
[['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;
この方法を試してください
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']
];
}
ルールで一意に設定するだけです[['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']],
];
}