آشنایی با دیتا بیس : Query Builder لاراول (در حال تکمیل)

0
66

معرفی Query Builder در لاراول

Query Builder در لاراول یک رابط کاربری ساده برای ارتباط با پایگاه داده پرتال شما می باشد که وضیفه اجرا عملیات و نمایش اطلاعات را بر عهده دارد . این عملیات برای تمام سیستم های پایگاه دادها طراحی شده است و از همه آن های ساپورت کنید .

Query Builder در لاراول از  متد PDO برای محافظت از اتصالات شما در برابر حملات , تزریق SQL استفاده می کند.

گرفتن اطلاعات و نتایج از پایگاه داده

گرفتن اطاعات تمام ردیف های یک جدول

برای شروع و عملیات کوئری (query) باید از تایع ٬table٬ از فساد(facade) ٬DB٬ استفاده کرد . شما می توانید از طریق تایع ٬table٬ نتیجه را بسیار شخصی سازی کنید به طوری که تمایل دارید خروجی آنگونه باشد . با استفاده از متد GET  این مورد را تست می کنید :

متد get در لاراول تمام Illuminate\Support\Collection را بر میگرداند که حاوی آبجکت (object) ٬StdClass٬ پی اچ پی است .

شما می توانید با دسترسی به ستون به خصوصیت هر شیء در هر ستون دسترسی داشته باشید:

گرفتن اطاعات تنها یک ردیف / گرفتن اطلاعات ستون از جدول

اگر شما فقط می خواهید اطلاعات یک ردیف(row) را از جدول پایگاه داده را برگردانید، می توانید از متد ٬first٬ استفاده کنید. این متد تنها آبجکت (object) ٬StdClass٬ را بر میگرداند .

اگر شما حتی نیاز ندارید که تمام اطلاعات یک ردیف را دریافت کنید می توانید تنها یک مقدار کوچکتر را بر اساس متد ٬value٬ بگیرید . این روش تنها مقدار ستون را به طور مستقیم باز می گرداند .

گرفتن لیستی از مقادیر یک ستون در دیتابیس

اگر می خواهید مجموعه ای از مقادیر یک ستون را بازگردانید، می توانید از متد ٬pluck٬ استفاده کنید. در این مثال، مجموعه ای از عنوان های سمت های کاربری را بازیابی می کنیم:

شما همچنین می توانید برای هر ستون کلید سفارشی (custom key) برای مجموعه بازگشتی مشخص کنید:

گرفتن نتایج و عملیات روی بسته های بسیار بزرگ اطلاعات دیتا بیس(کوئری های بسیار سنگین)  (Chunking Results)

اگر شما نیاز به کار با هزاران نتیجه و خروجی از پایگاه داده دارید به احتمال بسیار زیاد یکی از بهترین راه حل ها استفاده از متد chunk می باشد . این روش یک تکه کوچک (small chunk) از نتایج را در فقط در همان زمان بازیابی می کند و هر تکه را به یک بسته (Closure) برای پردازش می فرستد. این روش برای اجرای دستورات در Artisan بسیار مفید است که هزاران رکورد را پردازش می کند. برای مثال، اجازه دهید از بین تمام جدول کاربران (users) برای تنها همین زمان فعلی که نیاز داریم مثلا در زمان یک دقیقه تنها 100 رکورد را صدا بزنیم و با آن کار کنیم:

برای توقف این تکه رکورد های مشخص شده در عملیات و شرط های در حال اجرا زمانی که از ٬Closure٬ مقدار false بر میگردونه می توانید از دستوری مانند دستور زیر استفاده کنید :

دستور عمل های اجرا رکورد های دیتابیس (Aggregates)

در موتور پردازنده query builder یک سری دستورالعمل ها تعریف شده که شما با استفاده از آن می توانید عملیات های خود را بهتر مدیریت کنید مانند : ٬count٬ , ٬max٬, ٬min٬, ٬avg٬, ٬sum٬ .

جالب است بدانید که این عملیات قبل از خروجی گرفتن نتیجه یا همان کوئری شما انجام می شود :

البته، شما می توانید این روش ها را با سایر شرایط ترکیب کنید:

 تعریف شرط (IF) برای توابعی که از قبل موجود هستند

به جای استفاده از روش شمارش (متد count) برای تعیین اینکه آیا هر نتیجه ای در دیتابیس از قبل وجود دارد که با شرط های ٬query٬ مطابقت داشته باشد ، شما می توانید از متد های ٬exists٬ و ٬doesntExist٬ استفاده کنید:

تابع Select در انتخاب نتایج در دیتابیس (لاراول)

تعیین و مشخص کردن برای انتخاب (Select) بخشی از دیتابیس

البته شما نمی توانید از این متد برای انتخاب کل جدول دیتابیس استفاده کنید . از این متد برای بهینه سازی دستورات در صورتی که شما نیاز ندارید تمام اطلاعات را فراخوانی کنید استفاده می شود .

از متد ٬Select٬ تنهای برای انتخاب بخشی از جدول ها انتخاب می شود و کاربرد دیگری را نمی توان برای آن متصور شد . برای انتخاب بخشی از دیتابیس می توان طبق دستور نمونه زیر اقدام کنسد :

اگر قصد دارید که نتایج یا همان ستون های تکرار در نتایج شما به نمایش در نیاید می توانید از تابع ٬distinct٬ استفاده کنید :

اگر از قبل شما کوئری را صدا زده اید و نتایجش را هم دریافت کرده اید می توانید از تابع ٬addSelect٬ برای اضافه کرده یک ستون به اینتیجه اضافه کنید :

استفاده از متد (Raw Expressions) برای گرفتن اطلاعات غیر هدفمند

عملیات به صورت گسترده بر روی یک سری از ستون ها

شاید زمانی برسد که شما نیاز داشته باشید بدون در نظر گرفتن هیچ قابلیت و ويژه گی و یا حتی پروتوکل های امن ! به یک سری جدول ها دسترسی داشته باشید . در این مواقع باید از توابع ٬DB::raw٬ استفاده کنید .

لطفا توجه داشته باشید که تابع DB::raw در برابر حملات SQL injection آسیب پذیر است .

متدهای Raw در لاراول

معرفی و خلاصه ای از توابع Raw : اگر قصد دارید بدون نیاز توابع وردپرس به دیتابیس به صورت مستقیم کوئری بزنید می توانید از این تابع استفاده کنید .

همین طور که قبلا گفتیم برای استفاده از این متد باید چه کاری انجام دهید. برای استفاده بیشتر از این تابع و اتصال هر هه بهتر می توانید از توابع زیر نیز استفاده کنید :

تابع selectRaw

شما برای استفاده از تابع selectRaw می توانید آن را در قسمت select(DB::raw(…)) استفاده کنید . این روش یک آرایه اختیاری از آرگومان دوم را پذیرفته است:

توابع whereRaw / orWhereRaw

روشهای ٬whereRaw٬ و ٬orWhereRaw٬ را می توان برای تزریق raw string به کار برد. این روشها یک آرایه having را به عنوان آرگومان دوم خود پذیرفته اند:

تابع orderByRaw

تابع orderByRaw برای مرتب کردن مقدار توابع خروجی Raw است .

توابع Joins (ترکیب کردن) در دیتابیس لاراول

ترکیب کردن توابع داخلی در دیتابیس (Inner Join)

query builder (توابع داخلی کوئری لاراول) همچنین می تواند برای ترکیب ستون دو جدول استفاده شود. برای انجام دادن “ترکیب داخلی جداول” , “inner join”  شما می توانید از متد ٬join٬ در نمونه query builder لاراول استفاده کنید.

ترکیب (join) کردن دیتابیس لاراول از طریق (Left Join)

اگر شما تمایل دارید در ترکیب دیتابیس خود به جای٬Inner Join٬ از ٬Left Join٬ استفاده کنید باید از تابع ٬leftJoin٬ استفاده کنید . متد ٬leftJoin٬ تقریبا شبیه تابع ٬join٬ است :

ترکیب (join) کردن دیتابیس لاراول  ضربدری ( Join Clause)

در این متد شما می توانید یک ردیف در جدول را با تمامی ردیف ها در جدول دیگر ترکیب کنید (مانند تصویر بالا) برای اینکار شما می توانید از متد crossJoin در لاراول استفاده کنید :

ترکیب (join) کردن دیتابیس لاراول  – پیشرفته (قابلیت های بیشتر)

برای اینکار شما باید یک بسته یا همان (Closure) به آرگومان دوم پاس دهید برای ترکیب (join) کردن .

متغیر $join در مثال زیر همان آرگومان دوم هست .

اگر شما تمایل دارید که از متد where در این تابع استفاده کنید می توانید از دو تابع : where  و orWhere برای join کردن استفاده کنید . به جای مقایسه دو ستون، این روش ستون را نسبت به مقدار مقایسه می کند :

ترکیب (join) کردن دیتابیس لاراول – شاخه ای (Sub-Query Joins)

برای استفاده از تابع Sub-Query شما باید از توابع : joinSub  و leftJoinSub  و rightJoinSub استفاده کرد .

هر یک از این روش ها سه آرگومان دریافت می کند:

 به هم پیوستگی ها – ترکیب کردن دو کوئری (Unions)

بهترین روش برای ترکیب دو کوئری (query) در لاراول استفاده از تابع  union است . برای مثال برای ساخت کوئری اولیه با استفاده از متد union برای در کیب دو کوئری می توانید مانند مثال زیر عمل کنید :

استفاده از متد WHERE در متد های کوئری های لاراول

اگر کمی با زبان پایگاه داده آشنا باشید ، قطعا از کاربرد متد WHERE آگاهی کامل دارید . برای استفاده از این متد طبق استاندارد های لاراول برای این تابع شما نیاز به سه آرگومان دارید . آرگومان یا متغیر اولی نام ستون پایگاه داده شما می باشد . آرگومان دوم مختص عملگر یا همان نشانگر است . آرگومان سوم نیز برای برابری مقدار است یعنی چه مقداری را در نظر دارید .

به طور مثال در کوئری زیر در ستون “votes” مقدار برابر100” است :

برای راحتی در کار و مقایسه دو ستون در کوئری های لاراول و اینکه برابر با این مقدار باشد می توانید از آرگوان دوم برای برابری باشد :

برای استفاده از دیگر عملگر های نیز ما برای شما مثال زیر را آماده کرده ایم :

همچنین برای تابع where می توانید چند شرط را همزمان استفاده کنید :

تابع سراری Or در کوئری ها لاراول

شما با استفاده از تابع Or در متغیر where شما می توانید یک شرط دوم را هم در نظر بگیرید که یا یکی از شرط ها بر قرار باشد یا اینکه هر دو تابع برقرار باشد .

اضافه کردن شرط های بیشتر در کوئری های لاراول

تابع whereBetween

تابع whereBetween به شما کمک می کند که مقدار بین دو مقدار را پیدا کنید :

تابع whereNotBetween

تابع whereBetween به شما کمک می کند که مقداری بین دو مقدار نباشد را پیدا کنید :

توابع whereIn / whereNotIn

متد whereIn به شما کمک می کند چند مقدار را از چند ردیف یک ستون فراخوانی کنید .

متد whereNotIn به شما کمک می کند به جز چند مقدار از چند ردیف بقیه مقادیر یک ستون فراخوانی کنید .

توابع whereNull / whereNotNull

تابع whereNull به شما کمک می کنید تاردیف هایی که مقدار null دارند را به شما خروجی بدهد :

تابع whereNotNull به شما کمک می کنید تاردیف هایی که مقدار null ندارند را به شما خروجی بدهد :

توابع whereDate / whereMonth / whereDay / whereYear / whereTime

برای مقایسه اطلاعات یک ستون با یک زمان خاص می توانید از تابع whereDate استفاده کنید :

برای مقایسه اطلاعات یک ستون با یک زمان (ماه) خاص می توانید از تابع whereMonth استفاده کنید :

برای مقایسه اطلاعات یک ستون با یک زمان (روز) خاص می توانید از تابع whereDay استفاده کنید :

برای مقایسه اطلاعات یک ستون با یک زمان (سال) خاص می توانید از تابع whereYear استفاده کنید :

برای مقایسه اطلاعات یک ستون با یک زمان (زمان مشخص – ساعت و دقیقه و ثانیه) خاص می توانید از تابع whereTime استفاده کنید :

تابع whereColumn

برای مقایسه برابر بودن دو ستون در ئایگاه داده از تابع whereColumn استفاده می کنیم :

و شما امکان دارید که از این روش نیز بخواهید که دو جدول را با هم مقایسه کنید :

تابع whereColumn همچنین می توانید یک شرط دوم را هم در نظر بگیرد که احتمالا بسیار به کار شما می آید به طور خلاصه یعنی اگر شرط یک و شرط دو برقرار بود :

تعریف پارامتر ها به صورت گروهی – کوئری ها

شاید نیاز باشد که برای استفاده از تابع where نیاز به گزینه های بیشتری برای مدیریت کوئری های خود داشته باشید .

حال با استفاده از استاندارد های لاراول سعی می کنیم که ازن گزینه های بیشتر استفاده کنیم :

در تابع بالا اتفاقی که میفتد این است که تابع دوم در صورت انجام و وجود تابع اول انجام می شود و تعداد زیادی کوئری انجام نمی شود و همان اول یک شرط ساده می گذاریم تا در صورت نبود شرط نیازی به انجام بقیه عملیات نباشد .

جدا از بحث فریمورک لاراول کد بالا را در زبان sql مثال میزنیم :

شما همیشه باید برای استفاده از کوئری ها از گروه بندی ها استفاده کنید تا از انجام موارد غیر قابل پیشبینی جلوگیری کنیم مانند مثال بالا که به خاطر گروه بندی اول شرط اول بررسی و در صورت وجود بقیه شرط ها در نظر گرفته می شود .

توابع Where Exists

تابع whereExists در لاراول به نوعی همان تابع where exists  زبان sql است . از این تابع می توانید به عنوان چک و بررسی کردن یک مقدارمشترک در دو جدول یا ستون استفاده کرد :

دستورات بالا در واقع دستورات زیر به زبان sql هستند :

کار با تابع Where در مقدار های JSON

Laravel همچنین از توابع  انواع ستون ها با فرمت JSON در پایگاه های داده پشتیبانی می کند. در حال حاضر لاراول از فرمت هایی شامل MySQL 5.7، PostgreSQL و SQL Server 2016 پشتیبانی می کند.

برای کوئری زدن به ستون های JSON باید از نشانگر <- استفاده کنید :

برای دسترسی به آرایه های JSON  شما می توانید از تابع whereJsonContains استفاده کنید .

در MySQL  و PostgreSQL برای توابع چند آرایه ای می توانید از تابع whereJsonContains  استفاده کنید :

توابع Ordering, Grouping, Limit, & Offset

تابع orderBy

تابع orderBy به شما این اجاره را می دهد که نتایج را مرتب کنید . آرگومان اول این متغیر نام ستون و آرگومان دوم می گوید که نظم و ترتیب از آخر باشد یا از اول و این کار از طریق دوتابع  asc و desc انجام می شود .

توابع latest / oldest

از طریق دو تابع latest  و oldest می توانید به راحتی نتایج را از طریق تاریخ به صورت قدیم و جدید مرتب کنید . به صورت پیشفرض توابع از طریق ستون تاریخ created_at مرتب می شوند و در آخر تنها کافیست که نام ستون در خواستی خود را برای تابع تعریف کنید :

تابع inRandomOrder

تابع inRandomOrder به صورت تصادفی نتایج را برای شما مرتب می کند به طور مثال یکی از کاربر ها را به طور تصادفی بیرون می کشیم :

توابع groupBy / having

دوتابع groupBy  و having برای کوئری های دسته جمعی استفاده می شود .

متد havingدقیقا شبیه متد where  می باشد :

با استفاده از متد groupBy می توانید به تعداد آرگومان های که به این تابع پاس می دهید ستون از دیتابیس فراخوانی کنید :

توابع skip / take

برای محدود کردن نتیایج ارسال شده توسط کوئری و یا پریدن از روی یک عدد در نتایج می توانید از این توابع skip / take استفاده کنید :

برای جایگزین برای این دو متد می توانید از دو  تابع limit  و offset استفاده کنید :

توابع شرطی – Conditional Clauses

شاید نیاز باشد تا یکسری شرایط مهیا نشده کوئری صدا زده نشود ! مثلا زمانی متد where صدا زده شود و کاری را انجام دهد که مقداری خاصی برگشت داده شود باید از متد  :

متد when تنها دو خروجی دارد بر می گرداند : خروجی true که در اینصورت دستور اجرا می شود و یا متد false که اصلا متد اجرا نخواهد شد .

 

” width=”20″ height=”20″>

دیدگاه بگذارید

اولین دیدگاه را شما بگذارید !

avatar

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  مشترک شوید  
اطلاع از