Query Builder در لاراول، ابزار query builder یک رابط آسان و ساده برای ایجاد و اجرای پرس و جوهای پایگاه داده ارائه می دهد.
ما می توانیم از سازنده پرس و جو یا همان Query Builder ها برای انجام اکثر عملیات پایگاه داده در برنامه کاربردی استفاده کنیم، این ابزار تمام سیستم های پایگاه داده لاراول را پشتیبانی می کند.
Query Builder چگونه کار می کند؟
سازنده پرس و جو لاراول از اتصال پارامتر PDO برای محافظت از برنامه در برابر حملات تزریق SQL استفاده می کند. به همین خاطر نیازی به تمیز کردن یا پاکسازی رشتههای ارسال شده به آنها نیست.
نکته مهم : PDO از نام ستون های binding پشتیبانی نمی کند. بنابراین، هرگز نباید به ورودی کاربر اجازه بدیم نام ستونهای ارجاعشده رو از طریق کوئری ها مشخص کند، مثلا کوئری “order by” بر اساس ستون X.
خوب بریم مثال بزنیم و ببینیم در عمل به چه شکل کوئری بیلدرها با دادهای موجود در جداول دیتابیس کار می کنند.
آموزش استفاده از Query Builder ها در لاراول
قبل از شروع ما نیاز داریم دیتابیس و جدولی که دارای داده باشد رو ایجاد کنیم، اگر مراحل اپیکربندی و ایجاد دیتابیس و جداول در لاراول رو نمی دونید می تونید از مقاله های آموزشی لاراول در اینجا استفاده کنید.
در این مثال من یک کنترلر به نام “PostController” دارم که در متد “index” اون یک “view” رو بر می گردونم، نام دیتابیس ایجاد شده “laravelapp” و نام جدول “posts” می باشد.
فایل کنترلر(postController) رو باز می کنم و اولین Query Builder خودم رو در متد “index” به شکل زیر می نویسم.
use Illuminate\Support\Facades\DB;
public function index()
{
$posts = DB::select('SELECT * FROM posts');
dd($posts);
// var_dump($posts);
return view('blog.index');
}
در مثال بالا ما با استفاده از توابع “Facade” و ابزار کوئری بیلدر محتوای حدول “posts” رو دریافت و با دستور “dd” آن ها را در خروجی نمایش دادیم.
بر اساس نیاز می توانیم کوئری های مختلفی رو جهت واکشی داده های از جدول دیتابیس بنویسیم. در ادامه با آنها بیشتر آشنا میشیم.
// GET RECORD BASE ID
$posts = DB::select('SELECT * FROM posts WHERE id = 3');
// GET RECORD BASE ID IN ANOTHER WAY
$posts = DB::select('SELECT * FROM posts WHERE id = :id', ['id' => 3]);
// INSERT NEW RECORD
$posts = DB::insert('INSERT INTO posts (title, excerpt, body, image_path, is_published, min_to_read) VALUES(?, ?, ?, ?, ?, ?)', [
'Test', 'Test', 'Test', 'Test', true, 1
]);
// UPDATE RECORD BASE ID 203
$posts = DB::upate('UPDATE posts set body = ? WHERE id = ?', [
'Body 2', 203
]);
// DELETE RECORD BASE ID 203
$posts = DB::delete('DELETE FROM posts WHERE id = ?', [203]);
یک سری متدهای از قبل شده در ابزار کوئری بیلدر داریم که می تونیم کوئری های بالا رو به شکل ساده تری پیاده سازی کنیم.
// GET ALL DATA
$posts = DB::table('posts')->get();
// GET SPECIFIC COLUMNS DATA
$posts = DB::table('posts')
->select('title', 'body')
->get();
// LIMIT GET DATA
$posts = DB::table('posts')
->where('id', '>', 50)
->get();
// GET SPECIFIC RECORD BASE ID
$posts = DB::table('posts')
->where('id', 50)
->get();
// GET RECORD BASE CONDITION-1
$posts = DB::table('posts')
->where('is_published', true)
->where('id', '>', 50)
->get();
// GET RECORD BASE CONDITION-2
$posts = DB::table('posts')
->whereBetween('min_to_read', [2, 6])
->get();
// GET RECORD BASE CONDITION-3
$posts = DB::table('posts')
->whereNotBetween('min_to_read', [2, 3])
->get();
// GET RECORD BASE CONDITION-4
$posts = DB::table('posts')
->whereIn('min_to_read', [2, 6, 8])
->get();
// GET RECORD BASE CONDITION-5
$posts = DB::table('posts')
->whereNotNull('exerpt')
->get();
// GET RECORD BASE CONDITION-6
$posts = DB::table('posts')
->select('min_to_read')
->distinct()
->get();
// ORDER DATA
$posts = DB::table('posts')
->orderBy('id', 'desc')
->get();
// SKIP and TAKE Method
$posts = DB::table('posts')
->skip(30)
->take(10)
->get();
// GET DATA RANDOMLY
$posts = DB::table('posts')
->inRandomOrder()
->get();
// GET FIRST RECORD
$posts = DB::table('posts')
->first()
->get();
// FIND RECORD BASE ID
$posts = DB::table('posts')
->find(100)
->get();
// GET DATA BASE ID AND VALUE
$posts = DB::table('posts')
->where('id', 100)
->value('body')
->get();
// COUNT DATA BASE CONDITION-6$posts = DB::table('posts')
->where('id', '>' ,50)
->count();
dd($posts);
// MIN, MAX, SUM, AVG METHODS
$posts = DB::table('posts')
->min('min_to_read');
//->max('min_to_read');
//->sum('min_to_read');
//->avg('min_to_read');
dd($posts);
برای ارسال داده های دریافتی از کنترلر به view بدین شکل عمل می کنیم.
// CONTROLLER FILE
public function index()
{
$posts = DB::table('posts')->get();
//dd($posts);
return view('blog.index' , ['posts' => $posts]);
}
// VIEW FILE
{{ $posts }}
جمع بندی
در این مقاله کوتاه سعی کردم نحوه کار با Query Builder ها در لاراول رو به شکل ساده توضیح بدم. امیدوارم این مطلب براتون مفید واقع شده باشه.
لطفا اگر نظر و پیشنهادی در خصوص مطالب و پیشبرد آنها دارید خوشحال میشم در قسمت دیدگاه ها مطرح بفرمایید.