Yii Framework Forum: cek sebelum insert - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

cek sebelum insert Rate Topic: -----

#1 User is offline   teguh11 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 129
  • Joined: 13-November 11

Posted 29 February 2012 - 09:55 PM

gan ane ada masalah nih..
langsung aja. punya 1 tabel misalkan seperti ini.
| id | value |
--------------
| 1 | 100 |
| 2 | 500 |

nah trus saya ingin menambahkan data menggunakan batch menu kaya gini

setelah saya pilih data yang ingin ditambahkan, saya klik tambah.
misalkan saya dapet id 1 dengan value 100,200,300.
kan kalo saya pake query insert biasa nanti nilai id 1 dengan value 100 itu jadi ada dua.
saya inginnya sebelum di insert ke dalam tabel di cek terlebih dahulu, kalo data dengan id yang sama sudah ada, bisa di lewat/update kalo belum ada langsung di insert.

hasil setelah di insert yang di harapkan seperti ini
| id | value |
--------------
| 1 | 100 |
| 1 | 200 |
| 1 | 300 |
| 2 | 500 |
belajar itu mudah..
0

#2 User is offline   Finzaiko 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 37
  • Joined: 18-November 11
  • Location:Indonesia

Posted 01 March 2012 - 02:12 AM

walo saya baru belajar yii, saya ngambil dr contoh contact form mungkin bisa pake cara gini
1. buat crud pake gii seperti biasa.
2. buat model class meng-extend CFormModel karena model ini tidak berhubungan dengan database
class NamaModel extends CFormModel {

// buat attribute
	public $id;
	public $value;

// buat rules jika perlu
// buat method attributeLabels

}

3. buat actionInsert di controller
public function actionInsert() {

    // lakukan pengecekan disini, 
    // jika true lakukan insert
        $model = new NamaModel;
        if (isset($_POST['NamaModel'])) {
            if ($model->validate()) {
                $model->id = 'idnya';
                $model->value = 'nilainya';
                $model->save();
            }
        }
    }

4. buat view seperti contoh contact form

saya ga tau apa cara ini efektif :lol: , mungkin agan2 master punya cara lain
0

#3 User is offline   teguh11 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 129
  • Joined: 13-November 11

Posted 01 March 2012 - 05:36 AM

View PostFinzaiko, on 01 March 2012 - 02:12 AM, said:

walo saya baru belajar yii, saya ngambil dr contoh contact form mungkin bisa pake cara gini
1. buat crud pake gii seperti biasa.
2. buat model class meng-extend CFormModel karena model ini tidak berhubungan dengan database
class NamaModel extends CFormModel {

// buat attribute
	public $id;
	public $value;

// buat rules jika perlu
// buat method attributeLabels

}

3. buat actionInsert di controller
public function actionInsert() {

    // lakukan pengecekan disini, 
    // jika true lakukan insert
        $model = new NamaModel;
        if (isset($_POST['NamaModel'])) {
            if ($model->validate()) {
                $model->id = 'idnya';
                $model->value = 'nilainya';
                $model->save();
            }
        }
    }

4. buat view seperti contoh contact form

saya ga tau apa cara ini efektif :lol: , mungkin agan2 master punya cara lain


terima kasih nih gan masukannya. tapi saya ingin sekali klik tombol add, langsung 3 data dimasukan, walaupun bisa pake perulangan for, tapi nanti data yang di database ada value dengan id yang sama
belajar itu mudah..
0

#4 User is offline   mhdrasad 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 198
  • Joined: 20-April 11
  • Location:Bumi Indonesia

Posted 01 March 2012 - 10:08 PM

id nya bukan primary key ya gan?.
Wait For True Concept or Finish it With Coding Concept .
#chadnox
0

#5 User is offline   tito cah amikom 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 25
  • Joined: 06-February 12

Posted 12 March 2012 - 09:07 PM

View Postteguh11, on 29 February 2012 - 09:55 PM, said:

gan ane ada masalah nih..
langsung aja. punya 1 tabel misalkan seperti ini.
| id | value |
--------------
| 1 | 100 |
| 2 | 500 |

nah trus saya ingin menambahkan data menggunakan batch menu kaya gini

setelah saya pilih data yang ingin ditambahkan, saya klik tambah.
misalkan saya dapet id 1 dengan value 100,200,300.
kan kalo saya pake query insert biasa nanti nilai id 1 dengan value 100 itu jadi ada dua.
saya inginnya sebelum di insert ke dalam tabel di cek terlebih dahulu, kalo data dengan id yang sama sudah ada, bisa di lewat/update kalo belum ada langsung di insert.

hasil setelah di insert yang di harapkan seperti ini
| id | value |
--------------
| 1 | 100 |
| 1 | 200 |
| 1 | 300 |
| 2 | 500 |


PRIMARY KEY 2 FIELD
bisa gan,,,kedua field di jadikan primary key,jadi di field id bisa sama,,maksud nya yang jd primari key kedua field,,tapi id jangan di auto increment
0

#6 User is offline   xtremagix 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 19
  • Joined: 06-May 11

Posted 13 March 2012 - 11:03 AM

kalau keduanya di buat primary key,
tetap tidak bisa dipaksakan masuk ke database,
misalnya key 1 - 100 sudah ada sebelumnya, ketika di insert data yang sama pasti error
karena duplicate primary key akan ditolak oleh MySQL.

ada beberapa solusi untuk menanganinya:

PERTAMA :
membuat fungsi beforeSave() di model-nya, yang akan dieksekusi sebelum perintah save() model. misalnya:
public function beforeSave()
{
    // periksa tabel dengan PK yg sama dengan yg akan ditulis
    $model = self::findByPk(array($this->field1, $this->field2));
    if ($model)
         return false // gak jadi save karena datanya sudah ada
    else
         return true // data dengan PK yg sama belum ada, maka OK untuk save


}


KEDUA :
ada pula pendekatan menggunakan validasi di rules modelnya. kita bisa menambahkan fungsi validasi baru untuk memeriksa apakah input yang diberikan memenuhi syarat validasi atau tidak.

misalnya di model-nya:
public function rules()
{
   return array(
       array('field1, field2' , 'cekPK'),
       .... rules2 lainnya sesuai default dari model tabelnya  
   );
}

// tambahkan juga fungsi ini di model
public function cekPK()
{

    $model = self::findByPk(array($this->field1, $this->field2));
    if ($model)
         $this->addError('field1', 'Data sudah ada') // validasi model gagal sehingga perintah save() akan dibatalkan.

}

untuk metode ini, pastikan di controllernya, sebelum menyimpan data, juragan validasi dulu modelnya dengan perintah
if ($model->validate())
     $model->save();

metode ini bisa juga diterapkan di model Form, dengan perbedaan fungsi findByPk() tentu mengarah ke model table kamu.

KETIGA :
cara berikutnya sedikit lebih 'kasar' yaitu menyuntikkan langsung query mysql dengan perintah "INSERT IGNORE...", dengan perintah INSERT IGNORE, apabila primary key yg sama ditemukan, maka datanya tidak ditambahkan ke dalam tabel oleh MySQL

info tentang mysql syntax squery nya cek disini:
Mysql INSERT IGNORE

nah jadi metodenya adalah di Model Form nya kita buatkan fungsi $form->save() yang terdapat fungsi untuk menyimpan data dengan inject langsung query mysql. misalnya:

// file Form Model;

public function save()
{
      $query = "INSERT IGNORE INTO table_name (field1, field2) VALUES ($this->field1, $this->field2)";

      $connection=Yii::app()->db;
      $command=$connection->createCommand($query);
      $execute=$command->execute();

      return;
}


bila datanya banyak, maka silahkan dibuatkan foreach untuk tiap input-nya.


Semoga bisa membantu....
SUKSES SELALU... ::)
There's no such thing of Individualism, Sharing with others is how you respect the knowledge itself...
1

#7 User is offline   teguh11 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 129
  • Joined: 13-November 11

Posted 14 March 2012 - 02:49 AM

terima kasih semua atas jawabannya...
saya coba dulu...
belajar itu mudah..
0

#8 User is offline   Finzaiko 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 37
  • Joined: 18-November 11
  • Location:Indonesia

Posted 19 March 2012 - 04:26 AM

terima kasih gan @xtremagix, sy jg bru belajar n ketemu ksus beginian di yii, akhirnya dpt jg solusinya, thanks
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users