Bagaimana Cara Membuat Automatic Value In Yii?

Halo master semua,

Ada yang ingin saya tanyakan tentang generate automatic value di yii

dasar pemograman saya ambil dari ini http://sabitlabscode.wordpress.com/2012/05/05/yii-framework-membuat-custom-otomatis-value-ke-database/

dengan perubahan aplikasi seperti ini




protected function beforeValidate()

        {

            parent::beforeValidate();

            $date = new DateTime();

            if($this->isNewRecord)

            {

                $criteria=new CDbCriteria;      

                $criteria->select = 'nota';     

                $criteria->limit=1;             

                $criteria->order='nota DESC';   

                $last = $this->find($criteria);

                if($last)    

                {

                    $newID = (int)substr($last->nota,4) + 1 ;

                    $newID = 'INV-' .$newID;

                }

               else    

                {

                    $newID = 'INV-1';

                }

                $this->nota=$newID;     

           }

           return TRUE;

      }



Kodenya jalan tetapi hanya sampai INV-10, begitu melakukan INV-11 seterusnya sudah tidak bisa.

Saya mencoba modifikai kode seperti ini




protected function beforeValidate()

        {

            parent::beforeValidate();

            $date = new DateTime();

            if($this->isNewRecord)

            {

                $criteria=new CDbCriteria;      

                $criteria->select = 'nota';     

                $criteria->limit=1;             

                $criteria->order='nota DESC';   

                $last = $this->find($criteria);

                if($last)    

                {

                    $newID = (int)substr($last->nota,4) + 1 ;

                    $newID = 'INV-' .$newID;

                }

                elseif($last)

                {

                    $newID = (int)substr($last->nota,5) + 1 ;

                    $newID = 'INV-'."".$newID;

                }

                else   

                {

                    $newID = 'INV-1';

                }

                $this->nota=$newID;     // nilai1 di set nilai yang sudah di dapat tadi

           }

           return TRUE;

      }



Hasilnya tidak bisa, apakah benar modifikasinya? atau ada cara lain?

sekiranya hal ini sudah di bahas, tolong tunjukin linknya, soalnya sudah ngubek google dan forum, hasilnya tidak ada.

thanks ya atas perhatiannya

Logika dibawah ini maksudnya gimana gan?

           [color="#FF0000"][b] if($last)    [/b][/color]


            {


                $newID = (int)substr($last->nota,4) + 1 ;


                $newID = 'INV-' .$newID;


            }


           [color="#FF0000"] [b]elseif($last)[/b][/color]


            {


                $newID = (int)substr($last->nota,5) + 1 ;


                $newID = 'INV-'."".$newID;


            }


            else   


            {


                $newID = 'INV-1';


            }


            $this->nota=$newID;



if($last)    

{

  $newID = (int)substr($last->nota,4) + 1 ;

  $newID = 'INV-' .$newID;

}

else    

{

  $newID = 'INV-1';

}



klo dari algoritma nya memang perlu sedikit penyesuaian untuk nilai yang lebih dari 10 gan. gimana klo kode nya saya jadi kan seperti ini




if($last)    

{

  $newID = (int)substr($last->nota,4,strlen($last->nota)) + 1 ; //baris ini yang diubah gan

  $newID = 'INV-' .$newID;

}

else    

{

  $newID = 'INV-1';

}



sama kasusnya sama aneā€¦pake yang ini juga belum ngaruh nih gan :unsure:

wah, kalo ini mah kudu ngedebug, kalo diselect manual udah bener nggak hasilnya? invoice tertinggi ada di atas?




SELECT nota FROM nama_table ORDER BY nota DESC LIMIT 1



kalo di test ane hasilnya begini:




 huruf  

--------

 inv-9

 inv-8

 inv-5

 inv-3

 inv-2

 inv-11

 inv-10

 inv-1



jadi kodenya sih udah bener, cuma order campuran karakter ama angka sortingnya ngikutin karakter, bukan angkanya.

ada beberapa cara ngakalinnya,

  1. kalo gak mo ngerubah nomor invoice, dengan asumsi punya field id (autoincrement) dan data terakhir pasti yg paling besar nomornya, order bynya ganti aja ama id DESC

  2. kalo mo ngerubah nomor invoice, mungkin lebih aman pake format INV-9999, contoh INV-0001, INV-0002, dst