TGViewer
| کانال توسعه‌دهندگان لاراول | | کانال توسعه‌دهندگان لاراول | @developixlaravel · 1.54K subscribers
Post #97 578
فصل چهار - مدل‌ها و Eloquent ORM

بخش دوم - مدل ها - قسمت هشتم (متدهای جوین)


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, #PHP, #لاراول, #فصل_۴

👤 AmirHossein

💎 Channel: @DevelopixLaravel
  • 👍 3
  • ❤ 2
More from @developixlaravel
  1. Oct 1, 2026روابط پایگاه داده چند ریختی یا Eloquent Polymorphic در لاراول - قسمت اول در لاراول، روابط…
  2. Sep 30, 2026مدیریت همزمانی و قفل‌گذاری روی پردازش‌ها در لاراول (Laravel Atomic Locks) در بخش چهارم از…
  3. Sep 26, 2026🔥 پکیج: ورود با حساب‌های دیگر؛ Socialite برای اضافه‌کردن ورود با حساب‌های دیگر به پروژه ل…
  4. Sep 25, 2026🔒 فقط داده‌های تأییدشده را ذخیره کن وقتی یک فرم ویرایش پروفایل داری، ممکن است کلاینت علاو…
  5. Sep 20, 2026حفاظت از پردازش ها با Laravel Rate Limiter بخش سوم - پیکربندی در قسمت سوم از مجموعه آموزش…
  6. Sep 16, 2026🚀 ‏LaraGram Brain منتشر شد! از این به بعد برای ساخت ربات‌های تلگرام با فریم‌ورک LaraG…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →