ขอโค้ดการสร้าง autonumer id

1,783 สังคมนักพัฒนาระบบ (Community)

ขอวิธีการเขียนโค้ด php auto id หน่อยครับ แบบว่าเมื่อเราต้องการเพิ่มข้อมูลลงในฐานข้อมูลแล้วในฟอร์มที่เป็น Textbox จะรันแสดงลำดับที่ หรือ รหัสสินค้าอัตโนมัติโดยที่เราไม่ต้องป้อนเองแล้วจัดเก็บลงฐานข้อมูล แบบนี้อ่ะคับพอมีใครแนะนำวิธีการเขียนบ้างไหมครับ 

คำตอบ/อธิบาย

มานพ กองอุ่น

มานพ กองอุ่น

ตอบเมื่อ แก้ไขล่าสุดเมื่อ 15 ส.ค. 2018, 12:14:22

//ถ้าเป็น Yii2
public function getNextId(){
    //ตัวอย่างหากต้องการ SN59-00001

    
    $year = substr(date('Y') + 543, 2);//หาจากปีปัจจุบับคือ 59
    $lastRecord= Model::find()->where(['like', 'id_case', 'SN'.$year.'-'])->orderBy(['id' => SORT_DESC])->one();//หาตัวล่าสุดก่อน

    if ($lastRecord) {

        $digit = explode('-', $lastRecord->id_case);
            
        $lastDigit = ((int) $digit[1]);  // เปลี่ยน string เป็น integer สำหรับคำนวณ +1
        $lastDigit++; //เพิ่ม 1
        $lastDigit = str_pad($lastDigit, 5, '0', STR_PAD_LEFT);//ใส่ 0 ข้างหน้าหน่อย
    } else {
        $lastDigit = '00001';
    }

    return 'SN'. $year . '-' . $lastDigit;

}

ตัวอย่างนี้ใช้กับ Yii Framework 2 นะครับ ลองประยุกต์เอานะครับ

Fashi Hippie

Fashi Hippie

ตอบเมื่อ

code เอาไว้ที่ส่วนไหนคะ

มานพ กองอุ่น

มานพ กองอุ่น

ตอบเมื่อ

ใน Yii2 เอาไว้ใน controller ได้ครับ ตอน actionCreate() ก็เรียกใช้งานใน actionCreate() ได้ครับ เช่น

public function actionCreate(){
    $model = new Post();
    $model->nextid = $this->getNextId();
//...
}

 

Fashi Hippie

Fashi Hippie

ตอบเมื่อ

1. id_case ต้องเป็น int หรือ varchar คะ ต้อง auto number ด้วยหรือเปล่าค่ะ ในฐานข้อมูล

2. return $case // $case คืออะไรคะ

blushขอบคุณสำหรับคำตอบนะคะ..มือใหม่ค่ะ

มานพ กองอุ่น

มานพ กองอุ่น

ตอบเมื่อ

id_case เป็น varchar นะครับ เนื่องจากเก็บเป็น SN61-00001

$case เป็นคำนำหน้า (แก้แล้วเป็น 'SN')