Header Ads

Header ADS

Laravel join, left join, right join example

 Laravel Query Builder-এ join, leftJoin, এবং rightJoin ব্যাখ্যা করছি নিচে — সহজ ভাষায় এবং সাথে কিছু simple ও complex relationship example code-ও দেব।


🔸 1. join() – INNER JOIN

join() ব্যবহার করলে দুটি টেবিলের মধ্যে matching rows-গুলো পাওয়া যায়।

✅ Example:


DB::table('orders') ->join('users', 'orders.user_id', '=', 'users.id') ->select('orders.*', 'users.name') ->get();

ব্যাখ্যা: এখানে orders টেবিলের সাথে users টেবিলকে match করা হয়েছে orders.user_id = users.id এর উপর ভিত্তি করে।


🔸 2. leftJoin() – LEFT OUTER JOIN

leftJoin() সবসময় বামদিকের টেবিল (প্রথম টেবিল) এর সব rows ফেরত দেয়, এমনকি যদি দ্বিতীয় টেবিলে মিল না থাকে।

✅ Example:


DB::table('users') ->leftJoin('orders', 'users.id', '=', 'orders.user_id') ->select('users.name', 'orders.order_date') ->get();

ব্যাখ্যা: যদি কোনো user-এর orders না-ও থাকে, তবুও users.name দেখাবে এবং orders.order_date null হবে।


🔸 3. rightJoin() – RIGHT OUTER JOIN

rightJoin() সবসময় ডানদিকের টেবিল (দ্বিতীয় টেবিল) এর সব rows ফেরত দেয়, এমনকি যদি প্রথম টেবিলে মিল না থাকে।

✅ Example:


DB::table('orders') ->rightJoin('users', 'orders.user_id', '=', 'users.id') ->select('orders.*', 'users.name') ->get();

ব্যাখ্যা: users টেবিলের সব rows দেখা যাবে, এমনকি যদি কোনো orders না থাকে।


🔁 Complex Relation Example (Three Table Join)

ধরা যাক, তিনটা টেবিল আছে:

  • orders (order info)

  • users (who ordered)

  • products (which product ordered)


DB::table('orders') ->join('users', 'orders.user_id', '=', 'users.id') ->join('products', 'orders.product_id', '=', 'products.id') ->select('orders.id as order_id', 'users.name as customer', 'products.name as product') ->get();

ব্যাখ্যা: এখানে orders কে usersproducts এর সাথে join করা হয়েছে। আমরা order ID, customer name, এবং product name পাচ্ছি।


🧠 Bonus: Join with Where and Pagination


DB::table('orders') ->join('users', 'orders.user_id', '=', 'users.id') ->where('users.status', 'active') ->select('orders.*', 'users.name') ->paginate(10);

ব্যাখ্যা: কেবল active ইউজারদের order দেখাবে এবং ১০টি করে paginate করবে।


🔍 Tips:

  • Use leftJoin when you want all records from the primary table even if there's no match.

  • Use join when you're sure both tables have matching records.

  • Use rightJoin very rarely; instead, often you can switch table order and use leftJoin.




Laravel Query Builder দিয়ে multiple table join এর কয়েকটা practical উদাহরণ দেখাচ্ছি — সহজ থেকে একটু complex পর্যন্ত।


🔹 Scenario: তিনটা টেবিল আছে

  • users: id, name

  • orders: id, user_id, product_id, order_date

  • products: id, name, price


✅ Example 1: Basic 3-table Join


$data = DB::table('orders') ->join('users', 'orders.user_id', '=', 'users.id') ->join('products', 'orders.product_id', '=', 'products.id') ->select( 'orders.id as order_id', 'users.name as customer_name', 'products.name as product_name', 'products.price', 'orders.order_date' ) ->get();

ব্যাখ্যা: এখানে আমরা orders টেবিলের সাথে usersproducts টেবিলকে জোড়া লাগিয়েছি। ফলে আমরা কে কোন প্রোডাক্ট কখন অর্ডার করেছে সেটা জানতে পারছি।


✅ Example 2: Join + Where Condition


$data = DB::table('orders') ->join('users', 'orders.user_id', '=', 'users.id') ->join('products', 'orders.product_id', '=', 'products.id') ->where('users.status', 'active') ->where('products.price', '>', 100) ->select('users.name', 'products.name as product_name', 'orders.order_date') ->get();

ব্যাখ্যা: কেবল active users এবং যেসব প্রোডাক্টের দাম ১০০ টাকার বেশি – এমন অর্ডার গুলো দেখাচ্ছে।


✅ Example 3: Join with leftJoin and NULL Checking

ধরো কিছু order আছে যেগুলোর user বা product null হতে পারে।


$data = DB::table('orders') ->leftJoin('users', 'orders.user_id', '=', 'users.id') ->leftJoin('products', 'orders.product_id', '=', 'products.id') ->select('orders.id as order_id', 'users.name as user_name', 'products.name as product_name') ->get();

ব্যাখ্যা: এমন record-ও পাওয়া যাবে যেখানে user বা product নাই, কিন্তু order আছে।


✅ Example 4: 4-table Join (Advanced)

  • categories: id, name

  • products: id, name, category_id

  • orders: id, product_id, user_id

  • users: id, name


$data = DB::table('orders') ->join('products', 'orders.product_id', '=', 'products.id') ->join('categories', 'products.category_id', '=', 'categories.id') ->join('users', 'orders.user_id', '=', 'users.id') ->select( 'orders.id as order_id', 'users.name as customer_name', 'products.name as product_name', 'categories.name as category_name' ) ->get();

ব্যাখ্যা: এখানে চারটা টেবিল যুক্ত করে আমরা জানছি – কোন কাস্টমার কোন ক্যাটাগরির কোন প্রোডাক্ট অর্ডার করেছে।


🔚 Summary:

  • join = exact match

  • leftJoin = মূল টেবিলের সব ডাটা রাখবে

  • multiple join = simply একটার পর একটা join করো

  • .select() দিয়ে পছন্দমতো কলাম তুলে নাও


No comments

Theme images by fpm. Powered by Blogger.