در این نوشته می خواهیم نشان دهیم چگونه می توانید بوسیله ویژگی به نام Query Builder از لاراول، عملیات های SELECT و INSERT و UPDATE و DELETE را بر روی جدول ها انجام دهید. برای آموزش ویژگی Query Bilder در این زمان می خواهیم از خط فرمان کمک بگیریم پس پیش از هر چیز در خط فرمان سیستم عامل به مسیر پروژه لاراول رفته و سپس دستور زیر را اجرا کنید.

برنامه های وب باید ورودی ها را بوسیله فرم های اچ تی ام ال دریافت کنند ولی در این نوشته تنها برای آموزش، خط فرمان را برای وارد کردن داده ها به کار می بریم و در نوشته های پیش رو و پس از آموزش اداره کردن فرم ها در لاراول، نشان می دهیم که چگونه مقدارهای ورودی از فرم های اچ تی ام ال را به کنترل گر فرستاده تا نخست سنجش درستی (Validate) انجام شده و سپس کنترل گر با پایگاه داده ارتباط برقرار کرده و در پایان پاسخ برگشت داده شود.

Query Builder و کلاس DB در لاراول

برای به کارگیری از Query Builder بسیار ساده است به گونه ای که از متدهای کلاس DB برای انجام کوئری ها کمک می گیریم. نخست باید با متد ()table یک جدول را برگزنید. در کد زیر عملگر :: را به کار بردیم، زیرا متد ()table درون کلاس DB به گونه static نوشته شده است. با این متد می خواهیم کوئری را تنها بر روی یک جدول انجام دهیم. سپس در کد زیر متد دیگری به نام ()get را به دنبال ()table نوشته ایم، زیرا این متد تمامی سطرها را برگشت می دهد.

متد ()get همسان با دستور SELECT * FROM students است. شکل زیر خروجی اجرای دستور بالا را نشان می دهد. چون هنور برای هیچ یک از جدول های students و users سطری وارد نشده است، پس خروجی متد ()get یک آرایه خالی است. به یاد داشته باشید که هر سطر جدول به صورت یک آرایه انجمنی پی اچ پی نشان داده می شود که هر کلید آن، همنام با نام ستونی از جدول است که در خروجی برگشت داده شده است.

درج داده ها با Query Builder و کلاس DB

برای درج داده ها با Query Builder و کلاس DB، متد ()insert را به کار می بریم. این متد یک ورودی دریافت می کند که می تواند یک تک آرایه انجمنی یا یک آرایه از آرایه های انجمنی باشد. هر آرایه یک سطر را نشان می دهد و هر کلید آرایه انجمنی باید همنام با نام ستون از جدول باشد.

در کد زیر می خواهیم تنها یک سطر را به جدول student بی افزاییم، پس باید یک آرایه انجمنی ایجاد کنیم که هر کلید آن نام یکی از ستون های جدول است. همچنین ستون description را مقداردهی نکردیم، زیرا به درون کلاس آن را بوسیله متد ()nullable تعریف کرده ایم. اگر خروجی متد ()insert برابر با true باشد، پس مقدارهای آرایه درون ستون های جدول درج شده اند. همچنین در دنباله، متد ()get فراخوانی شده و می بینید که خروجی آن یک آرایه است که هر عنصر آن برابر با یک سطر است.

در کد زیر می خواهیم همزمان بیش از یک سطر را وارد کنیم، پس باید یک آرایه از آرایه های انجمنی را به تابع بفرستیم که هر کلید آرایه انجمنی برابر با یک ستون از جدول است. همچنین در کد زیر، در آرایه انجمنی نخست، ستون description مقدار دهی شده در صورتی که می توانستیم آن را NULL بفرستیم. در آرایه انجمنی دوم، نمی خواهیم برای ستون description مقداری بفرستیم، پس آن را نوشتیم ولی مقدار رشته خالی را برای آن تعیین کرده ایم.

برای نمایش تعداد سطرهای برگشتی از خروجی متد ()get باید تابع ()count از پی اچ پی را به کار ببریم. در کد زیر دستور ()DB::table(‘students’)->get به تابع ()count فرستاده شده است و خروجی آن در متغیری به نام count$ ریخته می شود و سپس مقدار متغیر بوسیله echo نمایش داده می شود.

واکشی داده ها با Query Builder و کلاس DB

اگر متد ()get را به تنهایی به کار ببریم، برابر با عبارت SELECT * FROM table_name است. برای اعمال شرط روی سطرهای خروجی، باید متد ()where را به کار ببریم. آرگومان نخست آن نام ستون از جدول درون متد ()table و آرگومان دوم مقدار دلخواه برای شرط است. در شکل زیر دو پرس و جو را انجام داده ایم، نخست تمامی سطرهایی برگشت داده می شود که مقدار ستون firstname آنها برابر با Amir باشد که از خروجی آن مشخص است که هیچ سطری وجود ندارد. در پرس و جوی دومی، همین شرط برای مقدار Sara آماده شده است که تنها یک سطر برگشت داده شده است.

متد ()get همه سطرها را برگشت می دهد و متد ()where شرطی را بر روی سطرهای خروجی اعمال می کند. کد زیر به زبان SQL همسان کد پی اچ پی بالا است. همچنین دقت کنید که نام تمامی ستون ها در خروجی آمده است ولی اگر بخواهیم تنها یک سری از ستون ها نشان داده شوند، باید از متد دیگری کمک بگیریم.

متد ()get همه سطرها را برگشت می دهد و اگر بخواهیم تنها یک سطر برگشت داده شود، پس باید متد ()first را به کار ببریم. در کد زیر فرض کردیم چندین سطر هستند که مقدار ستون firstname آنها برابر با amir است، پس برابر با شکل زیر اگر متد ()get را به کار ببریم، همه سطرهایی که ستون firstname آنها amir است نشان داده می شوند. (در اینجا ۲ سطر) ولی اگر متد ()first را به کار ببریم، به ترتیب نگهداری سطرها در جدول، نخستین آنها (آنی که زودتر درج شده بوده است) نشان داده می شود.