آموزش  RedBeanORM (PHP ORM) پارت اول

سلام به دوستان .من برنامه نویس دات نتم ولی بنا به دلایلی نیاز شده که کمی تا حدودی (!!!) آشنایی با php هم داشته باشم و برای ارتباط با دیتابیس اول رفتم سراغ mysqli که بعدش گفتم خب چرا ORM ن؟!رفتم و درباره ORM های php خوندم و دیدم یکی از بهترین هاش RedBean هست که در کمال تعجب آموزش درست حسابی هم ندیدم توی وب فارسی(شاید من ندیدم و باشه!) و گفتم یکم خودم دربارش بنویسم.خلاصه که قراره دات نتا رو بریزم تو php ها (اقتباسی از قیمه ها درون ماست ها:) ).خب اول بریم سراغ مفهوم ORM . ORM مخفف شده object relational mapper هست که ترجمه فارسیش میشه نگاشت رابطه ای اشیا (!!!!!) که اصلا بیخیال...خب ادامه بدیم ، ORM در حقیقت یک لایه بین زبان برنامه نویسی و پایگاه داده هست.وقتی بطور معمول شما میخواید دیتا از دیتابیس بخونید ، نیاز دارید تا دستور های SQL ای ارسال کنید سمت دیتابیس و result اون رو بطور دستی ، به object های زبان مورد نظرتون map کنید.خب چی میشه اگ یک کتابخانه اون وسط قرار بگیره که کار تولید کد های SQL ای (حداقل اونایی که خیلی ساده هستن) و همین طور map کردن رو برای ما انجام بده؟خب قطعا این باعث میشه که برنامه نویس نیاز نباشه زیاد وارد دنیای دیتابیس ها بشه و توی همون دنیای OOP خودش باقی بمونه و فقط با اشیا سرو کار داشته باشه.خب بریم برای شروع.توی مرحله اول بسته به نسخه php مورد استفادتون از این لینک فایل مربوطه رو دانلود کنید. بعد دانلود می بینید که یک فایل php بهتون تحویل میده که اون رو باید کنار اسکریپت های php خودتون قرار بدید.خب حالا میریم به phpmyadmin و یک دیتابیس ایجاد می کنیم تحت عنوان RedBeanDB و هیچی داخلش قرار نمیدیم.(خب یک نکته رو همینجا بگم ، user ای که داخل phpmyadmin دارید و از اون در مراحل بعد قصد استفاده داریم ، باید دسترسی های مرتبط با structure ها رو داشته باشه)خب حالا میخوایم بریم سراغ کد های phpخب بریم برای توضیحات . فایلی که ابتدای بحث از سایت مرجع دانلود شد اسمش rb هست و پسوندش هم .php (مگر اینکه نسخه خاصی ازش رو دانلود کنید که یکم توی نام گذاریش متفاوته ولی روال کار ثابته).اول اون فایل رو به برنامه خودمون اضافه میکنیم. توی مرحله بعد باید تنظیمات ابتدایی دیتابیس رو انجام بدیم . اگر می خوایم از SqlLite استفاده کنیم کافیه ;() R::setup را فراخوانی کنیم ولی خب چون الان قصد داریم بریم سراغ mysql ، این کار رو انجام نمیدیم. R که داریم ازش استفاده میکنیم یک کلاس هست که داخل همون فایل rb.php قرار گرفته و از کلاس Facade (که بازم توی همون فایل هست ) ارثبری کرده.(توضیحات اضافه توی این زمینه بنظرم حوصله رو سر میبره ولی می تونید راحت سورس کدش رو بخونید و دستتون میاد چخبره اون پشت).خب متد setup در اصل 4 ورودی میگیره . ورودی اول dns هست که ست کردیم براش (: mysql برای کار با دیتابیس mysql اجباریه - host هم اسم هاست رو باید وارد کنیم که حالا اگر روی سرور خاصی باشه ip اون و اگر روی لوکال باشه هم لوکال هاست - dbname هم نام دیتابیس هست ). ورودی دوم username ما رو میگیره و ورودی سوم هم رمز مارو میگیره. ورودی چهارم یک bool از ما میگیره و بطور پیشفرض false هست و اگر اون رو true کنیم ، باعث میشه که setup ما توی frozen mode اجرا بشه که ما باهاش کاری نداریم.خب بعد از اعمال تنظیمات حالا می خوایم یک جدول بنام post ایجاد کنیم. اینکار با استفاده از تابع dispense انجام میشه. ورودی این تابع نام جدول ما هست. (یک نکته که باید بگم اینه که اگر بطور مثال شما ده بار تابع dispense رو با یک نام خاص مثلا post صدا بزنید ، فقط همون بار اول جدول براتون ایجاد میشه و در خواست های بعدی که قصد داریم جدول با همون نام بسازیم ignore میشن و هیچ exception ای هم صادر نمیشه).خب حالا جدول رو ساختیم . قصد داریم درون این جدول ، دو ستون ایجاد کنیم با نام های author_ و title_ .کافیه بدین صورت که در تصویر بالا هست رفتار کنیم تا برای ما ستون ها ایجاد بشن. type این ستون ها در دیتابیس بر اساس مقدار هایی که بهشون پاس میدیم قرار میگیرن.در اخرم تابع store رو صدا میزنیم تا تغییرات مد نظرمون بر روی دیتابیس اعمال بشن.فقط یک نکته وجود داره اونم اینه که تابع store مقدار id ای که ذخیره کرده داخل دیتابیس رو برای ما بر میگردونه که بعدا ازش استفاده می کنیم.خب حالا بریم دیتابیس رو چک کنیم و ببینیم چه اتفاقی افتاد.خب میتونید ببینید که هم جدول با نام post ایجاد شد و هم درون اون جدول ستون های مد نظر ما و مقادیری که بهشون پاس دادیم هم قرار گرفت.حالا بریم که این بار از دیتابیسمون دیتا بخونیم.خب من اینجا id رو بصورت دستی وارد کردم ولی خب میشد از store مرحله قبل هم id رو گرفت ولی نیاز داشت که دوباره یک row (tuple ) به جدول اضافه بشه که ترجیح دادم این کارو نکنم.با استفاده از تابع load می تونیم که دیتا رو از دیتابیس load کنیم. ورودی اول این تابع ، نام جدول هست و ورودی دومش id مربوطه هست که قصد خوندنش رو داریم (کاملا واضحه که برای خوندن تمامی row ها ازش استفاده نمیشه چون صرفا یک id خاص رو از دیتابیس می خونه).خب حالا خروجی کد بالا رو بریم ببینیم.خب می بینیم ک به سادگی تونستیم با فراخوانی یک تابع ، از دیتابیس خودمون داده بخونیم .البته برای استفاده کردن از دیتا های خوانده شده می تونیم به شیوه کار با آرایه ها هم باهاشون رفتار کنیم. مثالش در تصویر پایین قرار گرفته خب حالا بریم سراغ حذف کردن یک row از جدول. حذف از جدول با تابع trash انجام میشه و برای حذف کردن اول باید اون row رو اول از دیتابیس load کنیم و بعد اقدام به حذف کنیم.خب بخش اول این مقاله رو بهتره همینجا تموم کنم.موفق و درگیر کد نویسی باشید :)لینک مقاله دوم