logo

Palette - Դարձրեք այն գունավոր🎨

Palette — Վիզուալ էջեր կառուցող, դիզայնի դիպլոմ չի պահանջվում:

Առցանց դեմո Ներբեռնել Palette

Scroll

Աշխատանք տվյալների բազայի հետ Drupal 7-ում - Դաս 9 - Թարմացման հարցումներ

12/05/2025, by Ivan

Թարմացման հարցումները միշտ պետք է օգտագործեն հարցման կոնստրուկտոր։ Տարբեր տվյալների բազաներ ունեն հատուկ մշակման մեթոդներ LOB (Large OBject, օրինակ՝ TEXT MySQL-ում) և BLOB (Binary Large OBject) դաշտերի համար, ուստի աբստրակցիայի մակարդակ անհրաժեշտ է, որպեսզի յուրաքանչյուր տվյալների բազայի վարորդ կարողանա ապահովել համապատասխան ֆունկցիոնալություն։

Թարմացման հարցումները պետք է սկսվեն db_update() ֆունկցիայից՝

<?php
$query = db_update('node', $options);
?>

Սա ստեղծում է թարմացման հարցման օբյեկտ, որը կփոխի մեկ կամ մի քանի գրառում node աղյուսակում։ Ուշադրություն դարձրեք, որ չկան անհրաժեշտություն գրել աղյուսակի անունը կուրծքանշաններով, կոնստրուկտորը ինքն է դա մշակում։

Թարմացման հարցման օբյեկտը օգտագործում է fluent API, այսինքն՝ բոլոր մեթոդները (բացառությամբ execute()) վերադարձնում են իրենք իրենց, ինչը թույլ է տալիս մեթոդները գրել շղթայաբար։ Շատ դեպքերում, սա նշանակում է, որ հարցման արդյունքը հնարավոր չէ վերագրել փոփոխականին։

Թարմացման հարցումը բաղկացած է թարմացվող դաշտերի և WHERE պայմանների զույգից։ WHERE պայմանների կառուցվածքը մենք մանրամասն կքննարկենք հաջորդ դասերում, իսկ այստեղ միայն հակիրճ կներկայացնենք։

Ստորև ներկայացված է թարմացման հարցման տիպիկ օրինակ՝

<?php
/* Այս սարսափելի օրինակը ցույց է տալիս ինչպես թարմացնել node աղյուսակի գրառումները */
$num_updated = db_update('node')
  ->fields(array(
    'uid' => 5,
    'status' => 1,
  ))
  ->condition('created', REQUEST_TIME - 3600, '>=')
  ->execute();
?>

Այս օրինակը համարժեք է հետևյալ SQL հարցմանը՝

UPDATE {node} SET uid=5, status=1 WHERE created >= 1221717405;

Օրինակում ներկայացված է բոլոր այն node գրառումների թարմացումը, որոնք ստեղծվել են վերջին ժամվա ընթացքում՝ տալով uid=5 և status=1 արժեքներ։ fields() մեթոդը ընդունում է միայն ասոցիատիվ զանգված, որը ցույց է տալիս, թե որ դաշտերն ինչ արժեք պետք է ստանան։ Ի տարբերություն insert հարցման, այստեղ միայն ասոցիատիվ զանգվածներ են թույլատրվում։ Դաշտերի հերթականությունը կարևոր չէ։

execute() մեթոդը վերադարձնում է փոփոխված տողերի քանակը։ Բայց հիշեք՝ այդ քանակը ցույց է տալիս միայն այն տողերը, որոնք իրապես փոփոխվել են։ Օրինակ, եթե արդեն իսկ կան uid=5 և status=1 ունեցող գրառումներ, ապա դրանք չեն փոփոխվի, ուստի չեն հաշվարկվի որպես փոփոխված։ Այսինքն՝ execute()-ի վերադարձած արժեքը միշտ չէ, որ ցույց է տալիս այն տողերի քանակը, որոնք համապատասխանում են WHERE պայմանին։