در لاراول، برای اجرای Raw Queries میتوان از متدهای مختلفی استفاده کرد. این متدها به شما امکان میدهند تا دستورات SQL را بهطور مستقیم در پایگاه داده اجرا کنید. این روشها بهویژه زمانی مفید هستند که بخواهید یک دستور SQL پیچیده را اجرا کنید که از قابلیتهای Eloquent یا Query Builder بهسادگی قابل پیادهسازی نباشد.
فصل 1: استفاده از DB Facade برای اجرای Raw Queries
لاراول یک کلاس DB برای اجرای Raw Queries فراهم میکند که میتوان از آن برای اجرای دستورات SQL بهطور مستقیم استفاده کرد.
1.1. اجرای یک دستور SELECT ساده
برای اجرای یک دستور SELECT میتوانید از متد select استفاده کنید. این متد یک آرایه از نتایج را بهعنوان خروجی برمیگرداند.
مثال:
در اینجا:
-
دستور
SELECTدادهها را از جدولpostsبا شرطstatus = 'published'انتخاب میکند. -
از
?برای جلوگیری از حملات SQL Injection استفاده شده است، که مقادیر در یک آرایه ارسال میشوند.
1.2. اجرای دستورات INSERT
برای افزودن رکورد به پایگاه داده، از متد insert استفاده میشود. این متد به شما اجازه میدهد که چندین رکورد را بهطور همزمان وارد کنید.
مثال:
این دستور یک رکورد جدید در جدول posts وارد میکند.
1.3. اجرای دستورات UPDATE
برای بهروزرسانی دادهها در پایگاه داده، از متد update استفاده میشود.
مثال:
این دستور وضعیت پست با id = 1 را به published تغییر میدهد.
1.4. اجرای دستورات DELETE
برای حذف رکوردها، از متد delete استفاده میشود.
مثال:
این دستور رکوردی را که دارای id = 1 است از جدول posts حذف میکند.
1.5. اجرای دستورات Raw برای اجرای دستورات پیچیده
اگر به دستورات پیچیده نیاز دارید که خارج از دستورهای ساده SELECT، INSERT، UPDATE و DELETE باشند، میتوانید از متد statement استفاده کنید. این متد به شما این امکان را میدهد که دستوراتی مانند ایجاد ایندکسها یا تغییرات پیچیده در ساختار پایگاه داده را اجرا کنید.
مثال:
این دستور یک ستون جدید به نام views به جدول posts اضافه میکند.
فصل 2: استفاده از Query Builder برای اجرای Raw Queries
لاراول Query Builder را برای اجرای دستورات SQL به صورت زنجیرهای و سادهتر فراهم کرده است. علاوه بر این، میتوانید Raw Queries را با ترکیب آن با Query Builder اجرا کنید.
2.1. اجرای Raw SELECT با Query Builder
اگر میخواهید یک دستور SELECT پیچیده را با Query Builder استفاده کنید، میتوانید از متد fromRaw استفاده کنید.
مثال:
در اینجا، از DB::raw() برای نوشتن Raw SQL استفاده شده است.
2.2. استفاده از whereRaw برای شرایط پیچیده
گاهی اوقات برای نوشتن شرایط پیچیده در where، باید از whereRaw استفاده کنید.
مثال:
این دستور پستهایی را که وضعیت آنها published است و تاریخ ایجاد آنها بعد از 2021-01-01 است، دریافت میکند.
فصل 3: استفاده از Eloquent برای اجرای Raw Queries
اگر بهطور مستقیم از Eloquent برای اجرای Raw Queries استفاده میکنید، میتوانید از متدهای raw برای اجرای دستورات SQL استفاده کنید.
3.1. اجرای Raw SELECT با Eloquent
اگر میخواهید دادهها را با استفاده از Eloquent ولی با یک دستور RAW SELECT دریافت کنید، میتوانید از selectRaw استفاده کنید:
مثال:
در اینجا، از selectRaw برای اجرای دستور RAW SELECT استفاده شده است و شرایط با whereRaw اعمال شده است.
3.2. اجرای Raw Queries برای دستورات دیگر با Eloquent
برای اجرای دستوراتی مانند INSERT، UPDATE و DELETE با استفاده از Raw Queries و Eloquent، میتوانید از متد DB::statement یا DB::update استفاده کنید.
مثال:
این دستور همانند استفاده از DB برای اجرای دستورات UPDATE است.
فصل 4: احتیاطها و نکات امنیتی
هنگام استفاده از Raw Queries، باید به نکات امنیتی توجه داشته باشید:
-
حملات SQL Injection:
-
همواره از Bindings (پارامترهای جانبی مانند
?) برای جلوگیری از حملات SQL Injection استفاده کنید. این کار میتواند امنیت کد شما را افزایش دهد. -
هرگز دادهها را مستقیماً در دستورات SQL قرار ندهید.
-
-
عملکرد و مقیاسپذیری:
-
استفاده از Raw Queries ممکن است عملکرد بهتری نسبت به Query Builder یا Eloquent در برخی موارد داشته باشد، اما این میتواند باعث کاهش مقیاسپذیری و خوانایی کد شود.
-
-
پشتیبانی از پایگاه دادههای مختلف:
-
توجه داشته باشید که دستورهای Raw SQL ممکن است در پایگاه دادههای مختلف (MySQL، PostgreSQL، SQLite و ...) متفاوت عمل کنند. بنابراین، اگر از چندین پایگاه داده استفاده میکنید، به این موضوع دقت کنید.
-
نتیجهگیری
در لاراول، برای اجرای Raw Queries میتوانید از کلاس DB یا حتی Query Builder و Eloquent استفاده کنید. این روشها به شما امکان میدهند که دستورات SQL پیچیده و خاص را اجرا کنید. با این حال، همیشه باید از Binding پارامترها برای جلوگیری از حملات SQL Injection استفاده کنید و در هنگام استفاده از Raw Queries دقت کنید تا کد شما امن و قابل نگهداری باشد.