TGViewer
| AmirHossein | | AmirHossein | @amirhdeveloper · 611 subscribers
Post #310 150
فصل چهار - مدل‌ها و 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 #لاراول #فصل_۴
💠 @AmirhDeveloper
.
  • ❤ 1
  • 👍 1
More from @amirhdeveloper
  1. Sep 30, 2026پکیج LaraGram Sentinel منتشر شد؛ یک پنل مانیتورینگ که هیچ چیزی از زیر دستش در نمی‌ره! تمام…
  2. Sep 23, 2026از امروز با کاهش شدید حاکرها مواجه میشیم
  3. Sep 19, 2026🔴 سوال سوم دو Region دارید: US-East و EU-West. کاربران در هر دو Region هستند. سیستم باید…
  4. Sep 19, 2026🟠 سوال دوم فرض کنید Service A به Service B درخواست می‌زند. B به‌دلیل overload، latency با…
  5. Sep 19, 2026🟢 سوال اول فرض کنید یک سرویس backend داریم که به PostgreSQL وصل می‌شود. تعداد requestها ن…
  6. Sep 19, 2026خیلی وقته پست‌های کانال فقط درمورد LaraGram بوده، وقتشه یکم جالب‌ترش کنیم اگر ممبرها هنوز…
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 →