ตัวสร้างการสืบค้น FOXDB ใช้พารามิเตอร์ PDO ที่มีผลผูกพันเพื่อป้องกันแอปพลิเคชันของคุณจากการโจมตีการฉีด SQL ไม่จำเป็นต้องทำความสะอาดหรือฆ่าเชื้อสตริงที่ส่งผ่านไปยังผู้สร้างแบบสอบถามว่าเป็นการผูกแบบสอบถาม
composer require webriumfoxdb
การกำหนดค่า
เลือก
แทรกงบ
อัปเดตงบ
ลบงบ
คุณสมบัติพิเศษ
สคีมา
มีคารมคมคาย
use Foxdb DB ;
use Foxdb Config ;
DB :: addConnection ( ' main ' , [
' host ' => ' localhost ' ,
' port ' => ' 3306 ' ,
' database ' => ' test ' ,
' username ' => ' root ' ,
' password ' => ' 1234 ' ,
' charset ' =>Config:: UTF8 ,
' collation ' =>Config:: UTF8_GENERAL_CI ,
' fetch ' =>Config:: FETCH_CLASS
]);คำสั่ง
'main'คือชื่อเริ่มต้นของการกำหนดค่าการเชื่อมต่อ
คุณสามารถใช้วิธี table ที่จัดทำโดย DB Facade เพื่อเริ่มการสืบค้น วิธีการ table ส่งคืนอินสแตนซ์ตัวสร้างแบบสอบถามที่คล่องแคล่วสำหรับตารางที่กำหนดช่วยให้คุณสามารถใช้ข้อ จำกัด เพิ่มเติมบนแบบสอบถามและจากนั้นในที่สุดก็ดึงผลลัพธ์ของการสืบค้นโดยใช้วิธีการรับ:
use Foxdb DB ;
$ users = DB :: table ( ' users ' )-> get ();
foreach ( $ users as $ user ) {
echo $ user -> name ;
} หากคุณเพียงแค่ต้องการดึงแถวเดียวจากตารางฐานข้อมูลคุณสามารถใช้วิธี first ของ DB Facade วิธีนี้จะส่งคืนวัตถุ stdclass เดียว:
$ user = DB :: table ( ' users ' )-> where ( ' name ' , ' Jack ' )-> first ();
return $ user -> email ; หากคุณไม่ต้องการทั้งแถวคุณอาจแยกค่าเดียวจากบันทึกโดยใช้วิธี value วิธีนี้จะส่งคืนค่าของคอลัมน์โดยตรง:
$ email = DB :: table ( ' users ' )-> where ( ' name ' , ' John ' )-> value ( ' email ' ); ในการดึงแถวเดียวตามค่าคอลัมน์ id ให้ใช้วิธี find :
$ user = DB :: table ( ' users ' )-> find ( 3 ); ความแตกต่างระหว่างวิธี find และ first คือวิธี first ส่งคืนผลลัพธ์ในรูปแบบของ stdclass ถ้ามีอยู่ แต่วิธี find จะส่งคืนผลลัพธ์ในรูปแบบของ Model ซึ่งให้คุณสมบัติเพิ่มเติมแก่เรา (หากค่าไม่มีอยู่ทั้งสองวิธีส่งกลับเท็จ)
- จากเวอร์ชัน 3 ขึ้นไปสามารถใช้การสืบค้นเพื่อค้นหาได้
$ user = User:: find ( 3 );
if ( $ user ){
$ user -> name = ' Tom ' ;
$ user -> save (); // update name
}
$ user = User:: where ( ' phone ' , ' 09999999999 ' )-> find ();
if ( $ user ){
$ user -> phone = ' 09999999998 ' ;
$ user -> save (); // update user phone number
} คุณสามารถใช้วิธี pluck ในตัวอย่างนี้เราจะดึงคอลเลกชันชื่อผู้ใช้:
use Foxdb DB ;
$ titles = DB :: table ( ' users ' )-> pluck ( ' title ' );
foreach ( $ titles as $ title ) {
echo $ title ;
}คุณสามารถระบุคอลัมน์ที่คอลเลกชันที่ได้ควรใช้เป็นคีย์โดยการให้อาร์กิวเมนต์ที่สองกับวิธีการดึง:
$ titles = DB :: table ( ' users ' )-> pluck ( ' title ' , ' name ' );
foreach ( $ titles as $ name => $ title ) {
echo $ title ;
} หากคุณต้องการทำงานกับระเบียนฐานข้อมูลนับพันให้พิจารณาใช้วิธี chunk ที่จัดทำโดย DB Facade วิธีนี้จะดึงผลลัพธ์ขนาดเล็กครั้งละครั้งและป้อนแต่ละก้อนเข้าสู่การปิดการประมวลผล ตัวอย่างเช่นลองดึงตารางผู้ใช้ทั้งหมดเป็นชิ้น 100 ระเบียนในแต่ละครั้ง:
use Foxdb DB ;
DB :: table ( ' users ' )-> orderBy ( ' id ' )-> chunk ( 100 , function ( $ users ) {
foreach ( $ users as $ user ) {
//
}
});คุณอาจหยุดชิ้นส่วนเพิ่มเติมจากการประมวลผลโดยการส่งคืนเท็จจากการปิด:
DB :: table ( ' users ' )-> orderBy ( ' id ' )-> chunk ( 100 , function ( $ users ) {
// Process the records...
return false ;
}); คุณสามารถใช้ each วิธี
use Foxdb DB ;
DB :: table ( ' users ' )-> orderBy ( ' id ' )-> each ( function ( $ user ) {
//
});FoxDB ได้สร้างวิธีง่ายๆสำหรับการปนเปื้อน ในตัวอย่างด้านล่างจำนวนผลลัพธ์ถูก จำกัด ไว้ที่ 10 ระเบียนและคุณสามารถรับข้อมูลได้โดยการเปลี่ยนหมายเลขหน้า
$ page = 1 ;
$ list = DB :: table ( ' posts ' )
-> is ( ' active ' )
-> paginate ( 10 , $ page );เอาต์พุตของมันคือ stdclass ที่มีคุณสมบัติต่อไปนี้:
$ list -> total ; // The total number of rows
$ list -> count ; // The number of rows received on the current page
$ list -> per_page ; // The number of rows to display on each page
$ list -> prev_page ; // Previous page number. If not available, its value is false
$ list -> next_page ; // next page number. If not available, its value is false
$ list -> current_page ; // Current page number
$ list -> data ; // List of data rows ตัวสร้างแบบสอบถามยังมีวิธีการที่หลากหลายสำหรับการดึงค่ารวมเช่น count , max , min , avg และ sum คุณสามารถเรียกวิธีการใด ๆ เหล่านี้หลังจากสร้างแบบสอบถามของคุณ:
use Foxdb DB ;
$ users = DB :: table ( ' users ' )-> count ();
$ price = DB :: table ( ' orders ' )-> max ( ' price ' );แน่นอนคุณอาจรวมวิธีการเหล่านี้เข้ากับข้ออื่น ๆ เพื่อปรับแต่งวิธีการคำนวณค่ารวมของคุณ:
$ price = DB :: table ( ' orders ' )
-> where ( ' finalized ' , 1 )
-> avg ( ' price ' );แทนที่จะใช้วิธีการนับเพื่อตรวจสอบว่ามีการบันทึกใด ๆ ที่ตรงกับข้อ จำกัด ของการสืบค้นของคุณคุณอาจใช้วิธีการที่มีอยู่และไม่ได้เป็นวิธี:
if ( DB :: table ( ' orders ' )-> where ( ' finalized ' , 1 )-> exists ()) {
// ...
}
if ( DB :: table ( ' orders ' )-> where ( ' finalized ' , 1 )-> doesntExist ()) {
// ...
}การระบุประโยคที่เลือก
คุณอาจไม่ต้องการเลือกคอลัมน์ทั้งหมดจากตารางฐานข้อมูลเสมอไป การใช้วิธี select คุณสามารถระบุประโยค "เลือก" ที่กำหนดเองสำหรับการสืบค้น:
use Foxdb DB ;
$ users = DB :: table ( ' users ' )
-> select ( ' name ' , ' email as user_email ' )
-> get ();
// Or you can send as an array
$ users = DB :: table ( ' users ' )
-> select ([ ' name ' , ' email as user_email ' ])
-> get ();แต่มีวิธีที่ทันสมัยกว่าในการทำเช่นนี้ คุณสามารถทำตัวเหมือนตัวอย่างด้านล่าง
$ users = DB :: table ( ' users ' )
-> select ( function ( $ query ){
$ query -> field ( ' name ' );
$ query -> field ( ' email ' )-> as ( ' user_email ' );
})
-> get (); บางครั้งคุณอาจต้องแทรกสตริงโดยพลการลงในแบบสอบถาม ในการสร้างนิพจน์สตริงดิบคุณสามารถใช้วิธี raw ที่จัดทำโดย DB Facade:
$ users = DB :: table ( ' users ' )
-> select ( DB :: raw ( ' count(*) as user_count, status ' ))
-> where ( ' status ' , ' <> ' , 1 )
-> groupBy ( ' status ' )
-> get ();หากต้องการใช้พารามิเตอร์ใน RAW เช่นตัวอย่างด้านล่าง
DB::raw('count(?)',['id'])
ข้อความดิบจะถูกฉีดเข้าไปในแบบสอบถามเป็นสตริงดังนั้นคุณควรระมัดระวังอย่างยิ่งเพื่อหลีกเลี่ยงการสร้างช่องโหว่การฉีด SQL
แต่เพื่อจุดประสงค์นี้จะเป็นการดีกว่าที่จะใช้วิธีการต่อไปนี้เพื่อหลีกเลี่ยงการโจมตี SQL injection
$ users = DB :: table ( ' users ' )
-> select ( function ( $ query ){
$ query -> count ( ' * ' )-> as ( ' user_count ' )
$ query -> field ( ' status ' );
})
-> get (); ในโครงสร้างนี้คุณสามารถเข้าถึง field count , ผล sum , avg , min , max , all , as วิธีการ
แทนที่จะใช้วิธี DB :: RAW คุณอาจใช้วิธีการต่อไปนี้เพื่อแทรกนิพจน์ดิบลงในส่วนต่าง ๆ ของแบบสอบถามของคุณ โปรดจำไว้ว่า FOXDB ไม่สามารถรับประกันได้ว่าแบบสอบถามใด ๆ ที่ใช้การแสดงออกแบบดิบนั้นได้รับการปกป้องจากช่องโหว่การฉีด SQL
สามารถใช้วิธีการที่และ orwhereraw ในการฉีดดิบ "โดยที่" ประโยคลงในแบบสอบถามของคุณ วิธีการเหล่านี้ยอมรับอาร์เรย์ที่เป็นตัวเลือกของการผูกเป็นอาร์กิวเมนต์ที่สองของพวกเขา:
$ orders = DB :: table ( ' orders ' )
-> whereRaw ( ' price > IF(state = "TX", ?, 100) ' , [ 200 ])
-> get ();อาจใช้วิธีการที่มีอยู่ในระบบและ orhavidraw เพื่อให้สตริงดิบเป็นค่าของประโยค "มี" วิธีการเหล่านี้ยอมรับอาร์เรย์ที่เป็นตัวเลือกของการผูกเป็นอาร์กิวเมนต์ที่สองของพวกเขา:
$ orders = DB :: table ( ' orders ' )
-> select ( ' department ' , DB :: raw ( ' SUM(price) as total_sales ' ))
-> groupBy ( ' department ' )
-> havingRaw ( ' SUM(price) > ? ' , [ 2500 ])
-> get ();ผู้สร้างแบบสอบถามอาจถูกใช้เพื่อเพิ่มส่วนการเข้าร่วมในการสืบค้นของคุณ ในการดำเนินการ "เข้าร่วมภายใน" พื้นฐานคุณสามารถใช้วิธีการเข้าร่วมในอินสแตนซ์ของตัวสร้างแบบสอบถาม อาร์กิวเมนต์แรกที่ส่งผ่านไปยังวิธีการเข้าร่วมคือชื่อของตารางที่คุณต้องเข้าร่วมในขณะที่อาร์กิวเมนต์ที่เหลือระบุข้อ จำกัด คอลัมน์สำหรับการเข้าร่วม คุณอาจเข้าร่วมหลายตารางในแบบสอบถามเดียว:
use Foxdb DB ;
$ users = DB :: table ( ' users ' )
-> join ( ' contacts ' , ' users.id ' , ' = ' , ' contacts.user_id ' )
-> join ( ' orders ' , ' users.id ' , ' = ' , ' orders.user_id ' )
-> select ( ' users.* ' , ' contacts.phone ' , ' orders.price ' )
-> get ();ใน FoxDB คุณสามารถทำได้ง่ายขึ้น
$ users = DB :: table ( ' users ' )
-> select ( ' users.* ' , ' orders.price ' )
-> join ( ' orders.user_id ' , ' users.id ' )
-> get (); ในโครงสร้างนี้คุณป้อนชื่อตารางที่คุณต้องการเข้าร่วมกับคีย์ต่างประเทศ ( 'orders.user_id' ) จากนั้นคีย์หลัก ( 'user.id' )
หากคุณต้องการดำเนินการ "เข้าร่วมซ้าย" หรือ "เข้าร่วมอย่างถูกต้อง" แทนที่จะเป็น "การเข้าร่วมด้านใน" ให้ใช้วิธีการซ้ายหรือ rightjoin วิธีการเหล่านี้มีลายเซ็นเช่นเดียวกับวิธีการเข้าร่วม:
$ users = DB :: table ( ' users ' )
-> leftJoin ( ' posts ' , ' users.id ' , ' = ' , ' posts.user_id ' )
-> get (); $ users = DB :: table ( ' users ' )
-> rightJoin ( ' posts ' , ' users.id ' , ' = ' , ' posts.user_id ' )
-> get ();คุณสามารถใช้วิธีการ CrossJoin เพื่อดำเนินการ "ข้ามเข้าร่วม" Cross เข้าร่วมสร้างผลิตภัณฑ์คาร์ทีเซียนระหว่างตารางแรกและตารางที่เข้าร่วม:
$ sizes = DB :: table ( ' sizes ' )
-> crossJoin ( ' colors ' )
-> get ();คุณสามารถใช้วิธีการของผู้สร้างแบบสอบถามที่จะเพิ่ม "โดยที่" คำสั่งในการสืบค้น การโทรขั้นพื้นฐานที่สุดไปยังวิธีที่ต้องใช้ข้อโต้แย้งสามข้อ อาร์กิวเมนต์แรกคือชื่อของคอลัมน์ อาร์กิวเมนต์ที่สองคือตัวดำเนินการซึ่งสามารถเป็นผู้ให้บริการที่รองรับฐานข้อมูลใด ๆ อาร์กิวเมนต์ที่สามคือค่าที่จะเปรียบเทียบกับค่าของคอลัมน์
ตัวอย่างเช่นการสืบค้นต่อไปนี้จะดึงผู้ใช้ซึ่งค่าของคอลัมน์โหวตเท่ากับ 100 และค่าของคอลัมน์อายุมากกว่า 35:
$ users = DB :: table ( ' users ' )
-> where ( ' votes ' , ' = ' , 100 )
-> where ( ' age ' , ' > ' , 35 )
-> get ();เพื่อความสะดวกหากคุณต้องการตรวจสอบว่าคอลัมน์คือ = เป็นค่าที่กำหนดคุณอาจส่งค่าเป็นอาร์กิวเมนต์ที่สองไปยังวิธีที่ FoxDB จะถือว่าคุณต้องการใช้ตัวดำเนินการ =:
$ users = DB :: table ( ' users ' )-> where ( ' votes ' , 100 )-> get ();ดังที่ได้กล่าวไว้ก่อนหน้านี้คุณอาจใช้ตัวดำเนินการใด ๆ ที่สนับสนุนโดยระบบฐานข้อมูลของคุณ:
$ users = DB :: table ( ' users ' )
-> where ( ' votes ' , ' >= ' , 100 )
-> get (); $ users = DB :: table ( ' users ' )
-> where ( ' votes ' , ' <> ' , 100 )
-> get (); $ users = DB :: table ( ' users ' )
-> where ( ' name ' , ' like ' , ' T% ' )
-> get ();เมื่อผูกมัดการโทรไปยังผู้สร้างแบบสอบถามซึ่งวิธีการ "ที่" จะรวมเข้าด้วยกันโดยใช้ AND Operator อย่างไรก็ตามคุณสามารถใช้วิธีการหรือที่ใดก็ได้เพื่อเข้าร่วมประโยคกับแบบสอบถามโดยใช้ OR Operator วิธีการหรือที่ใดก็ตามยอมรับอาร์กิวเมนต์เดียวกันกับวิธีที่:
$ users = DB :: table ( ' users ' )
-> where ( ' votes ' , ' > ' , 100 )
-> orWhere ( ' name ' , ' John ' )
-> get ();หากคุณต้องการจัดกลุ่มเงื่อนไข "หรือ" ภายในวงเล็บคุณอาจผ่านการปิดเป็นอาร์กิวเมนต์แรกไปยังวิธีหรือที่ใดก็ได้:
$ users = DB :: table ( ' users ' )
-> where ( ' votes ' , ' > ' , 100 )
-> orWhere ( function ( $ query ) {
$ query -> where ( ' name ' , ' Abigail ' )
-> where ( ' votes ' , ' > ' , 50 );
})
-> get ();ตัวอย่างด้านบนจะสร้าง SQL ต่อไปนี้:
select * from users where votes > 100 or (name = 'Abigail' and votes > 50)
อาจใช้วิธีการ whereNot และ orWhereNot เพื่อลบล้างข้อ จำกัด การสืบค้นกลุ่มที่กำหนด ตัวอย่างเช่นการสืบค้นต่อไปนี้ไม่รวมผลิตภัณฑ์ที่มีการกวาดล้างหรือมีราคาที่น้อยกว่าสิบ:
$ products = DB :: table ( ' products ' )
-> whereNot ( function ( $ query ) {
$ query -> where ( ' clearance ' , true )
-> orWhere ( ' price ' , ' < ' , 10 );
})
-> get (); วิธีการ whereBetween วิธีการตรวจสอบว่าค่าของคอลัมน์อยู่ระหว่างสองค่า:
$ users = DB :: table ( ' users ' )
-> whereBetween ( ' votes ' , [ 1 , 100 ])
-> get (); วิธี whereNotBetween วิธีการตรวจสอบว่าค่าของคอลัมน์อยู่นอกค่าสองค่า:
$ users = DB :: table ( ' users ' )
-> whereNotBetween ( ' votes ' , [ 1 , 100 ])
-> get (); วิธี whereIn ตรวจสอบว่าค่าคอลัมน์ที่กำหนดนั้นอยู่ในอาร์เรย์ที่กำหนด:
$ users = DB :: table ( ' users ' )
-> whereIn ( ' id ' , [ 1 , 2 , 3 ])
-> get (); วิธี whereNotIn ตรวจสอบว่าค่าคอลัมน์ที่กำหนดไม่ได้อยู่ในอาร์เรย์ที่กำหนด:
$ users = DB :: table ( ' users ' )
-> whereNotIn ( ' id ' , [ 1 , 2 , 3 ])
-> get (); เมธอด whereNull ตรวจสอบว่าค่าของคอลัมน์ที่กำหนดเป็นโมฆะ:
$ users = DB :: table ( ' users ' )
-> whereNull ( ' updated_at ' )
-> get (); เมธอด whereNotNull ตรวจสอบว่าค่าของคอลัมน์ไม่เป็นโมฆะ:
$ users = DB :: table ( ' users ' )
-> whereNotNull ( ' updated_at ' )
-> get (); วิธีการของ whereDate อาจใช้เพื่อเปรียบเทียบค่าคอลัมน์กับวันที่:
$ users = DB :: table ( ' users ' )
-> whereDate ( ' created_at ' , ' 2016-12-31 ' )
-> get (); วิธี whereMonth อาจใช้ในการเปรียบเทียบค่าของคอลัมน์กับเดือนที่เฉพาะเจาะจง:
$ users = DB :: table ( ' users ' )
-> whereMonth ( ' created_at ' , ' 12 ' )
-> get (); วิธีการของ whereDay อาจใช้เพื่อเปรียบเทียบค่าคอลัมน์กับวันที่เฉพาะเจาะจงของเดือน:
$ users = DB :: table ( ' users ' )
-> whereDay ( ' created_at ' , ' 31 ' )
-> get (); วิธี whereYear อาจใช้ในการเปรียบเทียบค่าของคอลัมน์กับปีที่เฉพาะเจาะจง:
$ users = DB :: table ( ' users ' )
-> whereYear ( ' created_at ' , ' 2016 ' )
-> get (); วิธี whereTime อาจใช้ในการเปรียบเทียบค่าของคอลัมน์กับเวลาที่กำหนด:
$ users = DB :: table ( ' users ' )
-> whereTime ( ' created_at ' , ' = ' , ' 11:20:45 ' )
-> get (); วิธี whereColumn จะใช้ในการตรวจสอบว่าสองคอลัมน์เท่ากัน:
$ users = DB :: table ( ' users ' )
-> whereColumn ( ' first_name ' , ' last_name ' )
-> get (); นอกจากนี้คุณยังสามารถผ่านตัวดำเนินการเปรียบเทียบกับวิธีการ whereColumn :
$ users = DB :: table ( ' users ' )
-> whereColumn ( ' updated_at ' , ' > ' , ' created_at ' )
-> get (); วิธี orderBy ช่วยให้คุณสามารถเรียงลำดับผลลัพธ์ของการสืบค้นโดยคอลัมน์ที่กำหนด อาร์กิวเมนต์แรกที่ยอมรับโดยวิธี orderBy ควรเป็นคอลัมน์ที่คุณต้องการเรียงลำดับในขณะที่อาร์กิวเมนต์ที่สองกำหนดทิศทางของการเรียงลำดับและอาจเป็น ASC หรือ DESC:
$ users = DB :: table ( ' users ' )
-> orderBy ( ' name ' , ' desc ' )
-> get ();ในการเรียงลำดับตามหลายคอลัมน์คุณสามารถเรียกใช้คำสั่งซื้อได้หลายครั้งเท่าที่จำเป็น:
$ users = DB :: table ( ' users ' )
-> orderBy ( ' name ' , ' desc ' )
-> orderBy ( ' email ' , ' asc ' )
-> get (); วิธีการ latest และ oldest ช่วยให้คุณสามารถสั่งซื้อผลลัพธ์ได้อย่างง่ายดายตามวันที่ โดยค่าเริ่มต้นผลลัพธ์จะถูกสั่งซื้อโดยคอลัมน์ created_at ของตาราง หรือคุณสามารถส่งชื่อคอลัมน์ที่คุณต้องการเรียงลำดับโดย:
$ user = DB :: table ( ' users ' )
-> latest ()
-> first ();วิธีการ inrandomorder อาจใช้ในการเรียงลำดับผลลัพธ์การสืบค้นแบบสุ่ม ตัวอย่างเช่นคุณสามารถใช้วิธีนี้เพื่อดึงผู้ใช้แบบสุ่ม:
$ randomUser = DB :: table ( ' users ' )
-> inRandomOrder ()
-> first ();groupBy และ having วิธีการ อย่างที่คุณคาดหวัง groupBy และ having วิธีการอาจใช้ในการจัดกลุ่มผลลัพธ์การสืบค้น ลายเซ็นของวิธีการ having ความคล้ายคลึงกับวิธีการที่:
$ users = DB :: table ( ' users ' )
-> groupBy ( ' account_id ' )
-> having ( ' account_id ' , ' > ' , 100 )
-> get ();คุณสามารถส่งอาร์กิวเมนต์หลายรายการไปยังวิธีการแบบกลุ่มไปยังกลุ่มโดยหลายคอลัมน์:
$ users = DB :: table ( ' users ' )
-> groupBy ( ' first_name ' , ' status ' )
-> having ( ' account_id ' , ' > ' , 100 )
-> get ();หากต้องการสร้างคำสั่งขั้นสูงให้ดูวิธีการที่มี
คุณสามารถใช้ skip และ take วิธีการเพื่อ จำกัด จำนวนผลลัพธ์ที่ส่งคืนจากแบบสอบถามหรือข้ามจำนวนผลลัพธ์ที่กำหนดในแบบสอบถาม:
$ users = DB :: table ( ' users ' )-> skip ( 10 )-> take ( 5 )-> get (); หรือคุณอาจใช้วิธี limit และ offset วิธีการเหล่านี้มีหน้าที่เทียบเท่ากับวิธีการใช้และข้ามตามลำดับ:
$ users = DB :: table ( ' users ' )
-> offset ( 10 )
-> limit ( 5 )
-> get (); ตัวสร้างแบบสอบถามยังมีวิธี insert ที่อาจใช้ในการแทรกบันทึกลงในตารางฐานข้อมูล วิธีการแทรกรับอาร์เรย์ของชื่อคอลัมน์และค่า:
DB :: table ( ' users ' )-> insert ([
' email ' => ' [email protected] ' ,
' votes ' => 0
]); หากตารางมี ID การเพิ่มขึ้นอัตโนมัติให้ใช้เมธอด insertGetId เพื่อแทรกระเบียนจากนั้นเรียกคืน ID:
$ id = DB :: table ( ' users ' )-> insertGetId (
[ ' email ' => ' [email protected] ' , ' votes ' => 0 ]
);นอกเหนือจากการแทรกระเบียนลงในฐานข้อมูลตัวสร้างแบบสอบถามยังสามารถอัปเดตเร็กคอร์ดที่มีอยู่โดยใช้วิธีการอัปเดต วิธีการอัปเดตเช่นวิธีการแทรกยอมรับอาร์เรย์ของคอลัมน์และคู่ค่าที่ระบุคอลัมน์ที่จะอัปเดต วิธีการอัปเดตส่งคืนจำนวนแถวที่ได้รับผลกระทบ คุณสามารถ จำกัด การสืบค้นการอัปเดตโดยใช้คำสั่ง:
$ affected = DB :: table ( ' users ' )
-> where ( ' id ' , 1 )
-> update ([ ' votes ' => 1 ]);ตัวสร้างแบบสอบถามยังมีวิธีการที่สะดวกสำหรับการเพิ่มหรือลดค่าของคอลัมน์ที่กำหนด ทั้งสองวิธีนี้ยอมรับอย่างน้อยหนึ่งอาร์กิวเมนต์: คอลัมน์ที่จะแก้ไข อาจมีการโต้แย้งที่สองเพื่อระบุจำนวนที่คอลัมน์ควรเพิ่มหรือลดลง:
DB :: table ( ' users ' )-> increment ( ' votes ' );
DB :: table ( ' users ' )-> increment ( ' votes ' , 5 );
DB :: table ( ' users ' )-> decrement ( ' votes ' );
DB :: table ( ' users ' )-> decrement ( ' votes ' , 5 ); DB :: table ( ' users ' )-> where ( ' id ' , $ id )-> delete ();คุณสามารถใช้ไวยากรณ์ที่สนุกสนานมากขึ้นซึ่งนอกเหนือจากการทำให้รหัสสั้นลงยังช่วยให้รหัสอ่านได้มากขึ้น
ในการสร้างแบบสอบถามตามบูลีนคุณสามารถใช้ true และ false หรือ is วิธีการ
$ active_list = DB :: table ( ' users ' )-> is ( ' active ' )-> get ();
// OR
$ active_list = DB :: table ( ' users ' )-> true ( ' active ' )-> get (); $ inactive_list = DB :: table ( ' users ' )-> is ( ' active ' , false )-> get ();
//OR
$ inactive_list = DB :: table ( ' users ' )-> false ( ' active ' )-> get ();คุณไม่จำเป็นต้องใช้วิธีที่สำหรับการสืบค้นของคุณติดต่อกัน คุณสามารถใช้วิธีการ AND หรือใช้หรือแทนที่จะเป็นที่ใดก็ได้
ตัวอย่าง:
DB :: table ( ' users ' )
-> is ( ' active ' )
-> and ( ' credit ' , ' > ' , 0 )
-> or ( ' vip ' , true )
-> get (); DB :: table ( ' users ' )
-> in ( ' id ' , [ 1 , 5 , 10 ])
-> get ();นอกจากนี้ยังมีวิธีการอื่น ๆ เช่นวิธีการต่อไปนี้:
not(..) / orNot(..)
in(..) / notIn(..) / orIn(..) / orNotIn(..)
like(..) / orLike(..)
null(..) / orNull(..) / notNull(..) / orNotNull(..)
date(..) / orDate(..)
year(..) / orYear(..)
month(..) / orMonth(..)
day(..) / orDay(..)
time(..) / orTime(..)