در حال بارگذاری...
بازگشت به صفحه اصلی
پایگاه داده مطالعه ۱۲ دقیقه

آموزش جامع دستورات مهم SQL و معادل آن‌ها در لاراول (Eloquent)

آموزش جامع دستورات مهم SQL و معادل آن‌ها در لاراول (Eloquent)

مدیریت پایگاه داده و تسلط بر کوئری‌نویسی یکی از مهم‌ترین مهارت‌ها برای هر Backend Developer و توسعه‌دهنده وب است. فریم‌ورک لاراول با ارائه Eloquent ORM و Query Builder، تعامل با دیتابیس را بسیار سریع و لذت‌بخش کرده است؛ اما درک دقیق دستورات خالص SQL و معادل لاراولی آن‌ها برای نوشتن برنامه‌های بهینه و کارآمد حیاتی است.

در این مقاله، تمامی دستورات پرکاربرد SQL را در ۵ بخش اصلی همراه با نمونه کدهای عملی در لاراول بررسی می‌کنیم.

🔍 بخش ۱: شرط‌گذاری و فیلتر کردن داده‌ها (Filtering)

برای فیلتر کردن و جداسازی داده‌ها از شرط‌های مختلف در SQL استفاده می‌شود:

⚙️

۱. شرط ساده با WHERE

بررسی یک شرط ساده روی ستون‌های دیتابیس:

-- SQL SELECT * FROM users WHERE status = 'active'; // Laravel Eloquent $activeUsers = User::where('status', 'active')->get();
🧪

۲. مقادیر خالی (whereNull & whereNotNull)

شناسایی رکوردهایی که مقدار یک ستون در آن‌ها خالی (NULL) است یا برعکس:

-- SQL SELECT * FROM users WHERE email_verified_at IS NULL; SELECT * FROM users WHERE email_verified_at IS NOT NULL; // Laravel Eloquent $unverified = User::whereNull('email_verified_at')->get(); $verified = User::whereNotNull('email_verified_at')->get();
🎯

۳. جستجوی لیستی، بازه‌ای و متنی (whereIn, whereBetween & LIKE)

بررسی وجود مقدار در لیست، بازه عددی یا الگوی متنی:

-- SQL SELECT * FROM products WHERE category_id IN (1, 2, 5); SELECT * FROM products WHERE price BETWEEN 100000 AND 500000; SELECT * FROM products WHERE title LIKE '%آیفون%'; // Laravel Eloquent $inCategory = Product::whereIn('category_id', [1, 2, 5])->get(); $inRange = Product::whereBetween('price', [100000, 500000])->get(); $searchResults = Product::where('title', 'like', '%آیفون%')->get();

⚡ بخش ۲: انتخاب، محدودسازی و دریافت داده (Selection & Fetching)

تعیین ستون‌های دریافتی، مرتب‌سازی و محدود کردن تعداد نتایج خروجی:

🔍

۱. انتخاب ستون‌ها و دریافت اولین رکورد (SELECT & first)

محدود کردن ستون‌های خروجی و دریافت فقط یک رکورد:

-- SQL SELECT id, name, email FROM users WHERE id = 1 LIMIT 1; // Laravel Eloquent $user = User::select('id', 'name', 'email')->where('id', 1)->first();
📄

۲. محدودسازی، رد کردن و مرتب‌سازی (Limit, Offset & OrderBy)

مرتب‌سازی صعودی/نزولی و اعمال Offset/Limit برای صفحه‌بندی:

-- SQL SELECT * FROM posts ORDER BY views DESC LIMIT 5 OFFSET 10; SELECT DISTINCT category_id FROM products; // Laravel Eloquent $posts = Post::orderBy('views', 'desc') ->skip(10) // OFFSET ->take(5) // LIMIT ->get(); $categories = Product::distinct()->get('category_id');

📊 بخش ۳: توابع محاسباتی و گروه‌بندی (Aggregation & Grouping)

انجام محاسبات آماری و دسته‌بندی داده‌های جدول:

📈

۱. توابع محاسباتی پایه (COUNT, SUM, AVG, MIN, MAX)

محاسبه مستقیم روی ستون‌های عددی:

-- SQL SELECT COUNT(*) FROM users; SELECT SUM(total_amount) FROM orders WHERE status = 'completed'; SELECT AVG(price) FROM products; // Laravel Eloquent $userCount = User::count(); $totalRevenue = Order::where('status', 'completed')->sum('total_amount'); $averagePrice = Product::avg('price');
🧩

۲. گروه‌بندی و شرط روی گروه‌ها (GROUP BY & HAVING)

دسته‌بندی داده‌ها و اعمال شرط روی نتایج گروه‌بندی‌شده:

-- SQL SELECT city, SUM(total_amount) as total_spent FROM orders GROUP BY city HAVING total_spent > 5000000; // Laravel Query Builder $citySales = DB::table('orders') ->select('city', DB::raw('SUM(total_amount) as total_spent')) ->groupBy('city') ->having('total_spent', '>', 5000000) ->get();

🔗 بخش ۴: اتصال جداول (Joins)

ترکیب و دریافت همزمان داده‌ها از چند جدول مرتبط:

🌐

انواع Joinها در SQL و لاراول

اتصال جدول‌ها به‌صورت INNER JOIN، LEFT JOIN و RIGHT JOIN:

-- SQL (Inner Join & Left Join) SELECT users.name, orders.order_number FROM users INNER JOIN orders ON users.id = orders.user_id; SELECT users.name, orders.order_number FROM users LEFT JOIN orders ON users.id = orders.user_id; // Laravel Query Builder $innerJoin = DB::table('users') ->join('orders', 'users.id', '=', 'orders.user_id') ->select('users.name', 'orders.order_number') ->get(); $leftJoin = DB::table('users') ->leftJoin('orders', 'users.id', '=', 'orders.user_id') ->select('users.name', 'orders.order_number') ->get();

🛠️ بخش ۵: تغییر و مدیریت داده‌ها (Data Manipulation)

دستورات مربوط به درج، ویرایش و حذف اطلاعات از جدول:

۱. درج داده جدید (INSERT INTO / create)

افزودن رکورد جدید به پایگاه داده:

-- SQL INSERT INTO users (name, email, password) VALUES ('سامان', 'saman@example.com', 'hashed_password'); // Laravel Eloquent $newUser = User::create([ 'name' => 'سامان', 'email' => 'saman@example.com', 'password' => bcrypt('password123'), ]);
📝

۲. ویرایش داده‌ها (UPDATE / update)

به‌روزرسانی مقادیر موجود در جدول:

-- SQL UPDATE users SET status = 'expired' WHERE status = 'pending'; // Laravel Eloquent User::where('status', 'pending')->update(['status' => 'expired']);
🗑️

۳. حذف داده‌ها (DELETE & TRUNCATE)

حذف رکوردهای مشخص یا پاک‌سازی کامل جدول:

-- SQL DELETE FROM users WHERE status = 'expired'; TRUNCATE TABLE logs; // Laravel Eloquent & Query Builder User::where('status', 'expired')->delete(); DB::table('logs')->truncate();

💻 نمونه کدهای عملی در پروژه لاراول (Laravel Example)

ترکیب تمامی این متدها در یک Controller واقعی لاراول:

namespace App\Http\Controllers; use App\Models\Order; use Illuminate\Http\Request; class OrderController extends Controller { public function getUserOrders(Request $request) { // ترکیبی از where، whereNotNull، orderBy، limit و select $orders = Order::select('id', 'order_number', 'total_amount', 'created_at') ->where('user_id', auth()->id()) ->whereNotNull('paid_at') ->whereBetween('total_amount', [100000, 2000000]) ->orderBy('created_at', 'desc') ->take(10) ->get(); return response()->json($orders); } }

🛠️ جمع‌بندی؛ تسلط بر کوئری‌نویسی

🎯

نکته پایانی برای توسعه‌دهندگان

اگرچه Eloquent نوشتن کوئری‌ها را فوق‌العاده سریع و راحت می‌کند، اما همیشه به کدهای SQL تولیدشده در پشت صحنه دقت کنید. استفاده نادرست از متدها می‌تواند باعث ایجاد مشکل مشهور N+1 یا کُند شدن شدید پایگاه داده در حجم بالای داده‌ها شود. همیشه از ابزارهایی مانند Laravel Debugbar یا متد toSql() برای بررسی کوئری‌های نهایی استفاده کنید.