بخش دوم - مدل ها - قسمت هشتم (متدهای جوین)
1- متد raw
برای اجرای کوئریهای خام استفاده میشود. از فساد DB دردسترس است.
$users = User::select(DB::raw('COUNT(*) as user_count'))
->whereRaw('age > ?', [18])
->get();2- متد select
برای انتخاب ستونهای خاص از یک جدول استفاده میشود.
$users = User::select('name', 'email')->get();3- متد join
رکوردهای دو جدول را بر اساس یک ستون مشترک ترکیب میکند. فقط رکوردهایی را برمیگرداند که در هر دو جدول مطابقت دارند.
$users = User::join('orders', 'users.id', '=', 'orders.user_id')
->select('users.name', 'orders.order_date')
->get();این کوئری فقط آن دسته از رکوردهایی را برمیگرداند که هم در جدول users و هم orders وجود دارند.
4- متد leftJoin
تمام رکوردهای جدول users را برمیگرداند، حتی اگر در جدول orders وجود نداشته باشد. در صورت نبود، مقادیر جدول دوم NULL خواهند بود.
$users = User::leftJoin('orders', 'users.id', '=', 'orders.user_id')
->select('users.name', 'orders.order_date')
->get();این کوئری تمام کاربران را برمیگرداند و اگر کاربری هیچ سفارشی نداشته باشد، فیلدهای مربوط به سفارش به صورت NULL نمایش داده میشوند.
5- متد rightJoin
تمام رکوردهای جدول orders را برمیگرداند، حتی اگر هیچ مطابقتی در جدول users وجود نداشته باشد. مقادیر جدول اول در صورت نبود NULL خواهند بود.
$orders = Order::rightJoin('users', 'orders.user_id', '=', 'users.id')
->select('users.name', 'orders.order_date')
->get();این کوئری تمام سفارشات را برمیگرداند، حتی اگر هیچ کاربری در جدول users مربوط به آن سفارش وجود نداشته باشد.
6- متد crossJoin
تمام ترکیبات ممکن بین رکوردهای دو جدول را برمیگرداند. این متد هیچ شرطی برای پیوند بین جداول ندارد.
$products = Product::crossJoin('categories')
->select('products.name', 'categories.category_name')
->get();این کوئری تمام ترکیبات ممکن بین محصولات و دستهبندیها را برمیگرداند.
7- متد on
برای تعیین شرط ترکیب بین دو جدول استفاده میشود. همراه با join و انواع دیگر آن استفاده میشود.
$users = User::join('orders', function ($join) {
$join->on('users.id', '=', 'orders.user_id')
->where('orders.status', 'completed');
})->get();این کوئری کاربران و سفارشهای آنها را ترکیب میکند، اما فقط سفارشهایی که وضعیت آنها "completed" است.
8- متد orOn
برای افزودن شرط OR در پیوند بین دو جدول استفاده میشود.
$users = User::join('orders', function ($join) {
$join->on('users.id', '=', 'orders.user_id')
->orOn('users.email', '=', 'orders.email');
})->get();این کوئری کاربران را با سفارشات ترکیب میکند، به شرط اینکه user_id یا email بین دو جدول مطابقت داشته باشد.
9- متد joinSub
برای پیوند یک جدول با یک subquery استفاده میشود.
$latestOrders = Order::select('user_id', DB::raw('MAX(order_date) as latest_order'))
->groupBy('user_id');
$users = User::joinSub($latestOrders, 'latest_orders', function ($join) {
$join->on('users.id', '=', 'latest_orders.user_id');
})->get();این کوئری کاربران را با جدیدترین سفارشهای آنها از طریق یک زیرکوئری ترکیب میکند.
10- متد joinLateral
یک subquery را برای هر رکورد جدول اصلی اجرا میکند و نتایج را ترکیب میکند. این متد در دیتابیسهایی که از LATERAL پشتیبانی میکنند، استفاده میشود.
$users = User::joinLateral('SELECT * FROM orders WHERE orders.user_id = users.id LIMIT 1', 'orders')
->get();این کوئری برای هر کاربر یک subquery را اجرا میکند تا اولین سفارش مربوط به آن کاربر را بازیابی کند.
11- متد leftJoinLateral
اگر هیچ رکوردی در subquery وجود نداشته باشد، مقادیر NULL بازگردانده میشوند.
$users = User::leftJoinLateral('SELECT * FROM orders WHERE orders.user_id = users.id LIMIT 1', 'orders')
->get();این کوئری تمام کاربران را برمیگرداند و در صورت وجود، اولین سفارش هر کاربر را نمایش میدهد. اگر سفارشی وجود نداشته باشد، مقادیر NULL برگردانده میشوند.
12- متد rightJoinLateral
تمام رکوردهای subquery نمایش داده میشوند، حتی اگر در جدول اصلی رکوردی وجود نداشته باشد.
$orders = Order::rightJoinLateral('SELECT * FROM users WHERE users.id = orders.user_id LIMIT 1', 'users')
->get();این کوئری تمام سفارشات را برمیگرداند و اگر کاربری در جدول users برای آن سفارش وجود نداشته باشد، مقادیر NULL برای کاربر برگردانده میشود.
▫️ 🟠
🔎 #laravel #لاراول #فصل_۴
💠 @AmirhDeveloper
.