Query Builder
لاراول Query builder های به هم پیوسته با عملکرد شئ گرا را فراهم کرده است. ما معمولا در controller های برنامه نیاز به ایجاد کوئری داریم. شروع ایجاد کوئری از Illuminate\Support\Facades\DB
می باشد. پس باید آن را در کلاس controller یا هر ماژول دیگری که در حال استفاده از query builder در آن هستیم درون ریزی (import) کرد.
برای ساخت کوئری باید جدول مورد نظر را با استفاده از متد table انتخاب کنیم و بعد عملیات های CRUD را روی آن انجام دهیم.
- insert – Create
- select – Read
- update – Update
- delete – Delete
برای دسترسی به پایگاه داده ما با استفاده از DB Fecade می توانیم درخواست خودمان را روی یک جدول خاص پیاده سازی کنیم . DB Fecade مانند کلاس WP_Query در وردپرس می باشد.
انواع متد ها در DB Fecade
زمانی که از DB
استفاده می کنیم یا به ما QueryBuilder بر میگرداند که قابل ارسال به view نخواهد بود و یا پارامتر قابل ارسال به view خواهد بود(array , collection , variable).
بنابراین ما برای ساخت Query Builder در لاراول دو نوع متد داریم :
متد های تمام کننده
مثل all , get , find که خروجی همان مورد نظر ما را می دهند .
Collection {#247 ▼ #items: array:3 [▼ 0 => categories {#248 ▶} 1 => categories {#249 ▶} 2 => categories {#250 ▶} ] }
همون طور که می بینید خروجی بالا یک collection می باشد که خود آن امکانات بسیار زیادی در اختیار ما قرار می دهد تا بتوانیم در view ها استفاده کنیم. مثلا برای تبدیل collection به آرایه می توان از متد toArray
استفاده کرد. یا می توان با contains
چک کرد که المان خاصی در collection وجود دارد یا خیر. می توانید با مراجعه به لیست method های موجود برای ساختمان داده collection با امکانات آن آشنا گردید.
public function index() { $users = DB::table('users')->get(); return view('user.index', ['users' => $users]); }
متد های تکمیلی
مثل where , join , union , orderBy که باید در پایان آن ها یکی از متد های تمام کننده متناسب آن مثل get بیاید تا بتوان آن را در view استفاده نمود.
Builder {#238 ▼ #query: Builder {#239 ▶} #model: categories {#226 ▶} #eagerLoad: [] #localMacros: [] #onDelete: null #passthru: array:13 [▶] #scopes: [] #removedScopes: [] }
خروجی کد بالا یک Builder است که می توان method های دیگری نظیر orderBy , with , … را به آن زنجیر (chain) کرد. متد های Builder با Collection با هم متفاوت است.
$users = DB::table('users') ->join('contacts', 'users.id', '=', 'contacts.user_id') ->join('orders', 'users.id', '=', 'orders.user_id') ->select('users.*', 'contacts.phone', 'orders.price') ->get();
نکته : اگر از Dynamic Property ها استفاده کنید مقدار مستقیم و قابل ارسال به view را به شما می دهد.
نکته : کلیه امکانات موجود در QueryBuilder در model موجود می باشد و از این رو یادگیری این موارد برای ما ضروری است.
دیدگاهتان را بنویسید