استفاده از Merge Query در برنامه نویسی ماژول دروپال

استفاده از Merge Query در برنامه نویسی ماژول دروپال

برنامه نویسی دیتابیس در دروپال 7

برنامه نویسی دیتابیس در دروپال 7 نسبت به دروپال 6 تفاوت های زیادی داشت. با اینکه توابع کار با دیتابیس دروپال 6 هنوز هم در دروپال 7 پشتیبانی می شوند، ولی روش دروپال 7 برای کار با دیتابیس مبتنی بر شی گرایی یا Object Oriented است. در این روش انواع query ها به صورت شیء (object) هستند که می توان با استفاده از آنها توابعی را برای تنظیم یک query صدا زد و یا query را برای اجرا به دیتابیس فرستاد. برای نمونه اگر بخواهید، از جدول کاربران دروپال اطلاعاتی را بازیابی کنید به این صورت عمل می کنید:

$select_query = db_select('users' , 'u');
$select_query->fields('u');
$result = $select_query->execute();

وارد کردن و یا به روز رسانی داده های دیتابیس دروپال

می توانید دستورات INSERT و UPDATE مورد نیاز خود را با استفاده از زبان برنامه نویسی PHP بسازید و با استفاده از توابع کار با دیتابیس، آنها را برای اجرا به دیتابیس ارسال کنید. ولی راه حل مناسب و Object Oriented برای انجام این کار در دروپال 7 استفاده از object های دستورات INSERT و UPDATE است که با فراخوانی توابع db_insert و db_update می توانید آنها را بسازید.

INSERT و یا UPDATE، مسئله این است!

وقتی که یک جدول در دیتابیس دارید، طبیعی است که به دستور INSERT و UPDATE برای وارد کردن یک ردیف جدید و یا به روز رسانی یک ردیف موجود، نیاز دارید. باید برای ورود داده ها به صورت جدا یک دستور INSERT را اجرا کنید و برای آپدیت تعدادی از فیلد های یک ردیف دستور UPDATE را اجرا کنید.

در بعضی از موقعیت ها، باید ابتدا کنترل کنید که برای شرایط خاصی، یک ردیف در جدول وجود دارد و یا نه. اگر ردیف مورد نظر وجود داشته باشد، باید بعضی فیلد های آن را آپدیت کنید. بنابراین به اجرای دستور UPDATE نیاز دارد. در صورتی که ردیف مورد نظر وجود نداشت، باید با استفاده از دستور INSERT آن ردیف را در جدول وارد کنید.

مثلا فرض کنید، یک جدول دارید که میزان اعتبار یک کاربر خاص را نگهداری می کند. این جدول از دو ستون uid و credits تشکیل شده است. ستون uid که مخفف User ID است کلید این جدول می باشد و شماره کاربر در سایت را ذخیره می کند. ستون credits نیز یک عدد است. وقتی می خواهید داده ای را در این جدول به روز رسانی کنید باید ابتدا کنترل کنید که برای کاربری با شماره uid مورد نظر، ردیفی وجود دارد یا خیر. و در این صورت تصمیم بگیرید که دستور INSERT را اجرا کنید و یا UPDATE.

MergeQuery برای INSERT و UPDATE

در چنین موقعیت هایی می توان از MergeQuery استفاده کرد. Merge Query یک نوع کوئری هیبرید است که در واقع ادغامی از دستور INSERT و UPDATE می باشد به همین دلیل به آن UPSERT نیز گفته می شود. این نوع کوئری، شرایط خاصی که به آن داده می شود را چک می کند و بر اساس آن تصمیم می گیرد که دستور INSERT اجرا شود و یا دستور UPDATE.

استفاده ازMergeQuery در برنامه نویسی دروپال

برای نمونه ما در جدولی که مثال زدیم، یک رکورد داریم:

جدول داده های دیتابیس

می خواهیم رکوردی برای کاربر شماره 1 در این جدول با مقدار 20 برای credits داشته باشیم. فارغ از اینکه رکوردی برای کاربر شماره 1 در این جدول وجود دارد یا نه، یک MergeQuery می سازید و داده ها را وارد می کنید. این object، وجود چنین رکوردی را بررسی می کند. نمونه کد زیر را در یک ماژول دروپال، مشاهده می کنید:

db_merge('user_credits')
->key(array(
  'uid' => 1
))
->fields(array(
    'credits' => 20,
))
->execute();

نتیجه را که آپدیت ردیف موجود در جدول است می بینید:

آپدیت جدول داده های دیتابیس

همانطور که در جدول می بینید برای کاربر شماره 2 ردیفی در جدول وجود ندارد و می خواهیم برای آن میزان اعتبار 100 را در جدول ذخیره کنیم. به کد زیر توجه کنید:

db_merge('user_credits')
->key(array(
  'uid' => 2
))
->fields(array(
    'credits' => 100,
))
->execute();

بعد از اجرای این کد در دروپال، ردیف جدیدی برای کاربر 2 به جدول اضافه می شود:

افزودن ردیف جدید به جدول داده های دیتابیس

بنابراین با استفاده از این object می توانید، همزمان از امکاناتی که توسط InsertQuery و UpdateQuery ارائه می شود، استفاده کنید. این روشی است که هسته دروپال 7 برای تغییر داده ها در دیتابیس، ارائه می کند.

نظرات

سلام
ممنون از آموزش بسیار روان و مفیدتون

تصویر admin
علی آقا! از لطفا شما سپاسگزارم.

ارسال نظر