Query Builder
- معرفی
- انتخاب می کند
- می پیوندد
- Advanced Wheres
- مصالح
- عبارات خام
- درج می کند
- به روز رسانی ها
- حذف می کند
- اتحادیه ها
- قفل بدبینانه
معرفی
سازنده پرس و جو پایگاه داده یک رابط راحت و روان برای ایجاد و اجرای پرس و جوهای پایگاه داده فراهم می کند. این می تواند برای انجام بیشتر عملیات پایگاه داده در برنامه شما مورد استفاده قرار گیرد و بر روی تمام سیستم های پایگاه داده پشتیبانی شده کار می کند.
توجه: سازنده پرس و جو لاراول از binding پارامتر PDO برای محافظت از برنامه شما در برابر حملات تزریق SQL استفاده می کند. نیازی به تمیز کردن رشتههایی که به عنوان پابند منتقل میشوند وجود ندارد.
انتخاب می کند
بازیابی همه سطرها از یک جدول
$users = DB::table('users')->get(); foreach ($users as $user){ var_dump($user->name);}
خرد کردن نتایج از یک جدول
DB::table('users')->chunk(100, function($users){ foreach ($users as $user) { // }});
شما می توانید با بازگشت
false
از
Closure
:
DB::table('users')->chunk(100, function($users){ // return false;});
بازیابی یک ردیف از یک جدول
$user = DB::table('users')->where('name', 'John')->first(); var_dump($user->name);
بازیابی یک ستون از یک ردیف
$name = DB::table('users')->where('name', 'John')->pluck('name');
بازیابی لیستی از مقادیر ستون
$roles = DB::table('roles')->lists('title');
این روش آرایه ای از عناوین نقش ها را برمی گرداند. همچنین می توانید یک ستون کلید سفارشی برای آرایه برگشتی تعیین کنید:
$roles = DB::table('roles')->lists('title', 'name');
تعیین یک بند انتخاب
$users = DB::table('users')->select('name', 'email')->get(); $users = DB::table('users')->distinct()->get(); $users = DB::table('users')->select('name as user_name')->get();
افزودن یک بند انتخاب به یک کوئری موجود
$query = DB::table('users')->select('name'); $users = $query->addSelect('age')->get();
استفاده از Where Operators
$users = DB::table('users')->where('votes', '>', 100)->get();
یا بیانیه ها
$users = DB::table('users') ->where('votes', '>', 100) ->orWhere('name', 'John') ->get();
استفاده از Where Between
$users = DB::table('users') ->whereBetween('votes', [1, 100])->get();
استفاده از Where Not Between
$users = DB::table('users') ->whereNotBetween('votes', [1, 100])->get();
استفاده از Where In با یک آرایه
$users = DB::table('users') ->whereIn('id', [1, 2, 3])->get(); $users = DB::table('users') ->whereNotIn('id', [1, 2, 3])->get();
استفاده از Where Null برای یافتن رکوردهایی با مقادیر تنظیم نشده
$users = DB::table('users') ->whereNull('updated_at')->get();
بندهای پویا کجا
حتی ممکن است از "dynamic" در جایی که دستورات را با استفاده از روشهای جادویی بسازید، استفاده کنید:
$admin = DB::table('users')->whereId(1)->first(); $john = DB::table('users') ->whereIdAndEmail(2, 'john@doe.com') ->first(); $jane = DB::table('users') ->whereNameOrAge('Jane', 22) ->first();
سفارش بر اساس، گروه بر اساس، و داشتن
$users = DB::table('users') ->orderBy('name', 'desc') ->groupBy('count') ->having('count', '>', 100) ->get();
افست و حد
$users = DB::table('users')->skip(10)->take(5)->get();
می پیوندد
همچنین میتوان از سازنده پرس و جو برای نوشتن عبارات پیوستن استفاده کرد. به نمونه های زیر دقت کنید:
بیانیه عضویت پایه
DB::table('users') ->join('contacts', 'users.id', '=', 'contacts.user_id') ->join('orders', 'users.id', '=', 'orders.user_id') ->select('users.id', 'contacts.phone', 'orders.price') ->get();
بیانیه پیوستن به سمت چپ
DB::table('users') ->leftJoin('posts', 'users.id', '=', 'posts.user_id') ->get();
همچنین می توانید بندهای پیوستن پیشرفته تری را مشخص کنید:
DB::table('users') ->join('contacts', function($join) { $join->on('users.id', '=', 'contacts.user_id')->orOn(...); }) ->get();
اگر میخواهید از یک عبارت «where» در پیوندهای خود استفاده کنید، میتوانید از متدهای
where
و
orWhere
در پیوند استفاده کنید.
به جای مقایسه دو ستون، این روش ها ستون را با یک مقدار مقایسه می کنند:
DB::table('users') ->join('contacts', function($join) { $join->on('users.id', '=', 'contacts.user_id') ->where('contacts.user_id', '>', 5); }) ->get();
Advanced Wheres
گروه بندی پارامترها
گاهی اوقات ممکن است نیاز داشته باشید که در آن عبارات پیشرفته تری مانند "where exists" یا گروه بندی پارامترهای تودرتو ایجاد کنید. سازنده پرس و جو لاراول می تواند این موارد را نیز مدیریت کند:
DB::table('users') ->where('name', '=', 'John') ->orWhere(function($query) { $query->where('votes', '>', 100) ->where('title', '<>', 'Admin'); }) ->get();
کوئری بالا SQL زیر را تولید می کند:
select * from users where name = 'John' or (votes > 100 and title <> 'Admin')
اظهارات موجود است
DB::table('users') ->whereExists(function($query) { $query->select(DB::raw(1)) ->from('orders') ->whereRaw('orders.user_id = users.id'); }) ->get();
کوئری بالا SQL زیر را تولید می کند:
select * from userswhere exists ( select 1 from orders where orders.user_id = users.id)
مصالح
سازنده پرس و جو همچنین انواع مختلفی از متدهای انبوه
را
ارائه می دهد، مانند
count
،،،،
و
.
max
min
avg
sum
استفاده از روشهای جمعآوری
$users = DB::table('users')->count(); $price = DB::table('orders')->max('price'); $price = DB::table('orders')->min('price'); $price = DB::table('orders')->avg('price'); $total = DB::table('users')->sum('votes');
عبارات خام
گاهی اوقات ممکن است لازم باشد از یک عبارت خام در یک پرس و جو استفاده کنید.
این عبارات به صورت رشته ای به پرس و جو تزریق می شوند، بنابراین مراقب باشید هیچ نقطه تزریق SQL ایجاد نکنید!
برای ایجاد یک عبارت خام، می توانید از
DB::raw
روش زیر استفاده کنید:
استفاده از یک عبارت خام
$users = DB::table('users') ->select(DB::raw('count(*) as user_count, status')) ->where('status', '<>', 1) ->groupBy('status') ->get();
درج می کند
درج رکوردها در یک جدول
DB::table('users')->insert( ['email' => 'john@example.com', 'votes' => 0]);
درج رکوردها در جدول با شناسه افزایش خودکار
اگر جدول دارای شناسه افزایش خودکار است،
insertGetId
برای درج رکورد و بازیابی شناسه استفاده کنید:
$id = DB::table('users')->insertGetId( ['email' => 'john@example.com', 'votes' => 0]);
توجه: هنگام استفاده از PostgreSQL، متد insertGetId انتظار دارد که ستون افزایش خودکار "id" نامیده شود.
درج چندین رکورد در یک جدول
DB::table('users')->insert([ ['email' => 'taylor@example.com', 'votes' => 0], ['email' => 'dayle@example.com', 'votes' => 0]]);
به روز رسانی ها
به روز رسانی رکوردها در یک جدول
DB::table('users') ->where('id', 1) ->update(['votes' => 1]);
افزایش یا کاهش مقدار یک ستون
DB::table('users')->increment('votes'); DB::table('users')->increment('votes', 5); DB::table('users')->decrement('votes'); DB::table('users')->decrement('votes', 5);
همچنین می توانید ستون های اضافی را برای به روز رسانی مشخص کنید:
DB::table('users')->increment('votes', 1, ['name' => 'John']);
حذف می کند
حذف رکوردها در یک جدول
DB::table('users')->where('votes', '<', 100)->delete();
حذف تمام رکوردها از یک جدول
DB::table('users')->delete();
کوتاه کردن یک جدول
DB::table('users')->truncate();
اتحادیه ها
سازنده پرس و جو همچنین یک راه سریع برای "اتحاد" دو پرس و جو با هم ارائه می دهد:
$first = DB::table('users')->whereNull('first_name'); $users = DB::table('users')->whereNull('last_name')->union($first)->get();
این
unionAll
روش نیز موجود است و دارای امضای روش مشابهی است
union
.
قفل بدبینانه
سازنده پرس و جو شامل چند عملکرد است که به شما کمک می کند "قفل بدبینانه" را در عبارات SELECT خود انجام دهید.
برای اجرای دستور SELECT با یک "قفل مشترک"، می توانید از
sharedLock
روش در یک پرس و جو استفاده کنید:
DB::table('users')->where('votes', '>', 100)->sharedLock()->get();
برای «قفل کردن برای بهروزرسانی» در یک عبارت SELECT، میتوانید از
lockForUpdate
روش در یک پرس و جو استفاده کنید:
DB::table('users')->where('votes', '>', 100)->lockForUpdate()->get();