در فریم ورک لاراول ، ابزار قدرتمندی به نام Eloquent ORM وجود دارد که کار با پایگاه داده را بسیار ساده میکند. بهجای نوشتن کدهای پیچیده SQL، میتوان با استفاده از روشهای شیگرا دادهها را خواند، ذخیره یا ویرایش کرد. در واقع Eloquent ORM مانند یک مترجم بین جداول پایگاه داده و کدهای PHP عمل میکند. وقتی اولین مدل خود را میسازید، میتوانید اطلاعات را بهصورت مستقیم و راحت از طریق آن مدیریت کنید.
برای مثال، ساخت یک مدل "User" به شما کمک میکند تا کاربران را از پایگاه داده بخوانید یا کاربر جدیدی ایجاد کنید. این روش باعث میشود کد شما تمیزتر، قابلدرکتر و حرفهایتر باشد. Eloquent ORM پایهایترین و درعینحال یکی از کاربردیترین بخشهای لاراول است که هر برنامهنویس باید آن را یاد بگیرد.
Eloquent ORM چیست و چرا باید از آن استفاده کنیم؟
Eloquent ORM یکی از اجزای کلیدی فریمورک لاراول است که به عنوان یک لایه ارتباطی میان کد و پایگاه داده عمل میکند. این سیستم بر پایه الگوی ActiveRecord طراحی شده و به توسعهدهندگان اجازه میدهد تا با دادهها مانند اشیا کار کنند، نه صرفاً با جداول و کوئریها. نتیجه آن، ساختاری تمیز، قابل فهم و هماهنگ با اصول برنامهنویسی شیگرا است.
یکی از مهمترین مزایای Eloquent، سادگی استفاده از آن است. شما بدون نیاز به نوشتن کوئریهای SQL پیچیده، میتوانید دادهها را بخوانید، ذخیره کنید یا بهروزرسانی نمایید. برای مثال، ایجاد یک کاربر جدید تنها با چند خط کد انجام میشود و این درک طبیعی از دادهها، باعث افزایش خوانایی کد و کاهش خطاهای احتمالی میشود.
از دیگر ویژگیهای مهم Eloquent ORM، امنیت بالا در برابر حملات رایج مانند SQL Injection است. این ابزار با استفاده از پارامترهای ایمن، دادهها را بهصورت خودکار از خطرات احتمالی محافظت میکند. علاوه بر این، امکان تعریف روابط بین جداول (One-to-Many، Many-to-Many و غیره) باعث میشود مدیریت دادههای پیچیده نیز ساده و ساختیافته باشد.
در نهایت، میتوان گفت Eloquent ORM نهتنها ابزار کارآمدی برای تعامل با پایگاه داده است، بلکه تجربهای روان، ایمن و لذتبخش از توسعه را برای برنامهنویسان لاراول به ارمغان میآورد.
Eloquent چگونه کار میکند؟
برای فهمیدن اینکه Eloquent چطور کار میکند، کافی است بدانیم هر جدول در پایگاه داده با یک مدل لاراول در ارتباط است. این مدل لاراول در واقع نماینده همان جدول است و با استفاده از آن میتوان دادهها را خواند، ذخیره یا حذف کرد.
وقتی دستوری مثل User::all() را اجرا میکنیم، Eloquent بهطور خودکار یک کوئری SQL میسازد، آن را در پایگاه داده اجرا میکند و نتیجه را بهصورت مجموعهای از اشیا PHP برمیگرداند. این یعنی هر رکورد از جدول به یک شیء تبدیل میشود و میتوان با آن مثل یک متغیر معمولی کار کرد.
در پشتصحنه، Eloquent با استفاده از اطلاعات موجود در مدل لاراول، نام جدول، کلید اصلی و روابط بین جداول را تشخیص میدهد. به این ترتیب، نیازی به نوشتن کوئریهای پیچیده نداریم و همه چیز به شکل خودکار انجام میشود. این روش باعث میشود کار با دادهها در لاراول بسیار راحتتر، تمیزتر و قابلدرکتر باشد.
پیشنیازهای شروع کار با Eloquent
قبل از شروع کار با Eloquent، لازم است محیط توسعه شما بهدرستی آمادهسازی شود.
ایجاد یک پروژه جدید لاراول

برای شروع، باید یک پروژه جدید لاراول ایجاد کنید. سادهترین روش استفاده از ابزار قدرتمند Composer است که وظیفه مدیریت وابستگیها را بر عهده دارد. کافی است در ترمینال دستور زیر را وارد کنید:
composer create-project laravel/laravel project-name
این دستور با استفاده از فرمان create-project، جدیدترین نسخه فریمورک را دانلود کرده و فرآیند نصب پروژه لاراول را بهصورت خودکار انجام میدهد. پس از اتمام نصب، پوشهای با ساختار منظم و آماده برای توسعه ایجاد میشود که میتوانید در آن کدنویسی را آغاز کنید.
اتصال به پایگاه داده
برای برقراری ارتباط بین پروژه و پایگاه داده، باید تنظیمات لازم را در فایل .env انجام دهید. این فایل در ریشه پروژه قرار دارد و شامل اطلاعات حساسی است که نحوه اتصال لاراول به دیتابیس را مشخص میکند.
در بخش مربوط به پایگاه داده، مقادیر زیر را مشاهده خواهید کرد:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your_database_name
DB_USERNAME=your_username
DB_PASSWORD=your_password
مقدار DB_CONNECTION نوع پایگاه داده را تعیین میکند (مثلاً mysql یا sqlite). DB_HOST آدرس سرور دیتابیس و DB_PORT شماره پورتی است که ارتباط از طریق آن برقرار میشود. همچنین، نام دیتابیس در DB_DATABASE، نام کاربری در DB_USERNAME و رمز عبور در DB_PASSWORD مشخص میشوند.
با ذخیره این تنظیمات، لاراول بهصورت خودکار اتصال ایمن و پایداری با پایگاه داده برقرار کرده و آماده اجرای دستورات Eloquent میشود.
ساخت اولین مدل Eloquent
برای ایجاد اولین مدل در Eloquent، کافی است از ابزار خط فرمان قدرتمند لاراول یعنی Artisan استفاده کنید. این ابزار فرایند تولید فایلها و ساختارهای اصلی پروژه را بسیار سریع و منظم انجام میدهد. برای ساخت مدل جدید، در ترمینال دستور زیر را وارد کنید:
php artisan make:model Post
با اجرای دستور make:model، لاراول بهطور خودکار فایلی به نام Post.php در مسیر app/Models ایجاد میکند. این فایل در واقع نمایندهی جدول posts در پایگاه داده است و نقش اصلی را در تعامل با دادهها ایفا میکند.
درون این فایل، یک کلاس Model تعریف شده که از کلاس پایه Illuminate\Database\Eloquent\Model ارثبری میکند. این کلاس شامل ویژگیها و متدهایی است که امکان خواندن، ایجاد، ویرایش و حذف دادهها را به سادهترین شکل فراهم میکند.
ساختار مدل بهگونهای طراحی شده که میتوان تنظیماتی مانند نام جدول، کلید اصلی (primaryKey)، نوع دادهها (casts) و روابط بین جداول را در آن مشخص کرد. برای نمونه، میتوان رابطهی hasMany بین مدل User و مدل Post تعریف نمود تا هر کاربر چندین پست داشته باشد.
با ایجاد اولین مدل، پایهی اصلی کار با Eloquent را بنا میگذارید؛ جایی که دادهها از حالت خام خارج شده و در قالب اشیای قابل مدیریت در اختیار شما قرار میگیرند.
ایجاد Migration برای جدول مدل
برای هر مدل در Eloquent، نیاز است جدولی در پایگاه داده وجود داشته باشد که دادههای آن مدل را ذخیره کند. این کار با استفاده از Migration در لاراول انجام میشود. Migrationها در واقع اسکریپتهایی هستند که تغییرات ساختار پایگاه داده را بهصورت نسخهبندیشده ثبت میکنند و به شما اجازه میدهند جدولها را ایجاد، ویرایش یا حذف کنید.
برای ساخت یک Migration جدید، کافی است از دستور زیر در ترمینال استفاده کنید:
php artisan make:migration create_posts_table
این دستور فایلی ایجاد میکند که درون آن ساختار جدول با استفاده از کلاس Schema و متد create table تعریف میشود. بهعنوان مثال:
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('content');
$table->timestamps();
});
در این قطعهکد، جدول posts با ستونهای id، title، content و زمانبندی خودکار (created_at و updated_at) ساخته میشود. پس از تنظیم ساختار جدول، کافی است دستور زیر را اجرا کنید:
php artisan migrate
با اجرای php artisan migrate، تمامی Migrationهای موجود اعمال میشوند و جدولها در پایگاه داده ایجاد خواهند شد. این روش باعث میشود تغییرات دیتابیس بهصورت منظم، مستند و قابل بازگشت باشند و توسعه پروژه در تیمهای بزرگ با نظم و اطمینان بیشتری پیش برود.
سفارشیسازی مدل
در بسیاری از پروژهها، مدلهای Eloquent بهصورت پیشفرض نیاز ما را برطرف میکنند، اما در پروژههای واقعی گاهی باید رفتار آنها را تغییر دهیم. اینجاست که مفهوم سفارشیسازی مدل اهمیت پیدا میکند. لاراول به ما این امکان را میدهد تا با چند property ساده، کنترل دقیقتری بر روی مدلها و ارتباط آنها با پایگاه داده داشته باشیم.
یکی از پراپرتیهای کلیدی، $table است. بهصورت پیشفرض، لاراول نام جدول را از نام مدل استخراج میکند. برای مثال، مدل Post به جدول posts متصل میشود. اما اگر نام جدول متفاوت باشد، میتوان آن را بهصورت زیر تغییر داد:
protected $table = 'blog_posts';
با این کار، مدل Post به جدول blog_posts در پایگاه داده متصل میشود.
پراپرتی مهم دیگر، $primaryKey است. لاراول بهطور پیشفرض ستون id را بهعنوان کلید اصلی در نظر میگیرد، اما در صورت استفاده از کلیدی با نام متفاوت (مثلاً post_id)، باید آن را مشخص کرد:
protected $primaryKey = 'post_id';
در بسیاری از پروژهها ممکن است نیازی به ثبت زمان ایجاد و بهروزرسانی رکوردها نباشد. در این حالت میتوان با تنظیم مقدار $timestamps به false، این قابلیت را غیرفعال کرد:
public $timestamps = false;
یکی از مهمترین ویژگیهای امنیتی در مدلها مربوط به $fillable و $guarded است. $fillable مشخص میکند کدام فیلدها مجاز به پر شدن از طریق عملیات create() یا update() هستند:
protected $fillable = ['title', 'content', 'author_id'];
در مقابل، $guarded تعیین میکند کدام فیلدها نباید بهصورت مستقیم مقداردهی شوند، مثلاً:
protected $guarded = ['id'];
استفاده درست از این دو پراپرتی نقش مهمی در جلوگیری از حملات تزریق داده (Mass Assignment Vulnerability) دارد و امنیت برنامه را افزایش میدهد.
در نهایت، سفارشیسازی مدل نهتنها باعث سازگاری بیشتر با ساختار پایگاه داده میشود، بلکه کنترل کاملتری بر رفتار دادهها، امنیت و یکپارچگی سیستم ایجاد میکند. در پروژههای حرفهای لاراول، تسلط بر این تنظیمات، تفاوت میان یک کد معمولی و یک ساختار مهندسیشده را رقم میزند.
کار با مدلهای Eloquent

پس از ایجاد مدل، نوبت آن است که با استفاده از قدرت Eloquent دادهها را مدیریت کنیم. در دنیای توسعه نرمافزار، عملیات اصلی بر روی دادهها با عنوان CRUD شناخته میشود؛ یعنی create (ایجاد)، read (خواندن)، update (بهروزرسانی) و delete (حذف). هر یک از این عملیات در لاراول با مجموعهای از Eloquent methods بهسادگی قابل انجام است.
خواندن اطلاعات از پایگاه داده
خواندن دادهها از پایگاه داده، از اصلیترین وظایف Eloquent در لاراول است. این فرایند با استفاده از متدهای قدرتمند و ساده انجام میشود که امکان بازیابی رکوردها را بهصورت کاملاً شیگرا فراهم میکنند.
سادهترین روش برای واکشی تمام دادهها از یک جدول، استفاده از متد all() است. این متد تمامی رکوردهای جدول مرتبط با مدل را بهصورت مجموعهای از اشیا برمیگرداند:
$posts = Post::all();
در صورتی که بخواهیم رکورد خاصی را بر اساس شناسه (ID) واکشی کنیم، متد find() کاربرد دارد:
$post = Post::find(1);
اما گاهی نیاز به فیلتر کردن دادهها داریم. در این حالت، متد where() وارد عمل میشود تا شرایط خاصی را برای جستوجو اعمال کند:
$posts = Post::where('status', 'published')->get();
در این مثال، فقط پستهایی که وضعیت آنها “published” است بازگردانده میشوند. متد get() در انتهای عبارت، نتایج را از پایگاه داده واکشی کرده و در قالب مجموعهای از مدلها برمیگرداند.
برای زمانی که تنها به یک رکورد نیاز داریم، میتوان از متد first() استفاده کرد. این متد اولین نتیجهای را که با شرایط تعیینشده مطابقت دارد، بازمیگرداند:
$post = Post::where('id', 5)->first();
ترکیب هوشمندانه متدهای all()، find()، where()، first() و get() به شما این امکان را میدهد تا هر نوع دادهای را با کمترین کد و بالاترین خوانایی واکشی کنید. این متدها قلب فرایند بازیابی رکوردها در Eloquent هستند و درک عمیق آنها، گامی اساسی در تسلط بر کار با پایگاه داده در لاراول محسوب میشود.
ذخیره و بهروزرسانی اطلاعات
در Eloquent، مدیریت دادهها تنها به خواندن محدود نمیشود؛ بلکه بخش مهمتری از کار، ذخیره اطلاعات جدید و بهروزرسانی دادههای موجود است. این فرآیند با استفاده از متدهای قدرتمند و سادهای مانند save()، update() و create() انجام میشود.
برای ذخیره رکورد جدید، میتوان ابتدا یک نمونه از مدل ایجاد کرد و سپس دادهها را در آن قرار داد:
$post = new Post();
$post->title = 'پست جدید';
$post->content = 'محتوای آموزشی لاراول';
$post->save();
در اینجا متد save() دادههای واردشده را در پایگاه داده ذخیره میکند. این روش زمانی مفید است که بخواهید کنترل بیشتری روی مقداردهی فیلدها داشته باشید یا عملیات خاصی را قبل از ذخیره انجام دهید.
اگر بخواهید دادهای را مستقیماً و با یک خط کد وارد کنید، میتوانید از متد create() استفاده نمایید:
Post::create(['title' => 'پست نمونه', 'content' => 'متن تستی']);
این متد به کمک ویژگی $fillable فقط فیلدهای مجاز را ذخیره میکند و از تزریق دادههای ناامن جلوگیری مینماید.
برای بهروزرسانی دادهها نیز میتوان ابتدا رکورد را واکشی کرده و سپس مقادیر جدید را در آن اعمال کرد:
$post = Post::find(1);
$post->title = 'عنوان جدید';
$post->update();
همچنین متد update() قابلیت بهروزرسانی گروهی را دارد و میتوان با ترکیب آن با شرط where() چندین رکورد را بهطور همزمان تغییر داد:
Post::where('status', 'draft')->update(['status' => 'published']);
این متدها باعث میشوند عملیات ذخیره اطلاعات و بروزرسانی در لاراول بسیار سریع، خوانا و امن انجام شود. Eloquent با این امکانات، ارتباط با پایگاه داده را از سطح کوئریهای پیچیده SQL به یک تجربه شیگرای ساده و قدرتمند تبدیل میکند.
حذف اطلاعات
در Eloquent، حذف دادهها از پایگاه داده به سادگی چند خط کد است. این کار با استفاده از متدهای delete() و destroy() انجام میشود که هر دو امکان حذف رکوردها را به صورت امن و کارآمد فراهم میکنند.
برای حذف یک رکورد خاص، ابتدا باید آن را از پایگاه داده واکشی کرده و سپس متد delete() را روی آن فراخوانی کنید:
$post = Post::find(1);
$post->delete();
در این حالت، رکورد با شناسه ۱ از جدول مربوط به مدل حذف میشود. متد delete() معمولاً زمانی استفاده میشود که شیء مدل از قبل در حافظه بارگذاری شده باشد و بخواهیم آن را حذف کنیم.
اما گاهی لازم است چندین رکورد را بدون نیاز به بارگذاری تکتک آنها حذف کنیم. در این مواقع، متد destroy() بهترین گزینه است. برای مثال:
Post::destroy([2, 3, 4]);
در این نمونه، رکوردهای با شناسه ۲، ۳ و ۴ بهصورت همزمان از پایگاه داده حذف میشوند. همچنین میتوان از destroy() برای حذف تنها یک رکورد استفاده کرد:
Post::destroy(5);
در پروژههای واقعی، حذف دادهها ممکن است به صورت منطقی (Soft Delete) انجام شود؛ به این معنا که رکورد بهجای حذف کامل، فقط علامتگذاری میشود تا در آینده قابل بازیابی باشد.
بهطور کلی، استفاده از متدهای delete() و destroy() باعث میشود عملیات حذف رکوردها در لاراول دقیق، سریع و کاملاً قابل کنترل باشد. این سادگی در کنار قابلیت اطمینان بالا، یکی از دلایل محبوبیت Eloquent در میان توسعهدهندگان حرفهای است.
قدرت واقعی Eloquent: کار با روابط (Relationships)

قدرت اصلی Eloquent در توانایی آن برای مدیریت روابط لاراول نهفته است. این سیستم به شما اجازه میدهد ارتباط میان جداول مختلف را بهصورت طبیعی و خوانا تعریف کنید. روابطی مانند hasOne، hasMany، belongsTo و manyToMany ساختار دادهها را منظم و قابلدرک میسازند.
برای مثال، یک کاربر میتواند چندین پست داشته باشد و هر پست به یک کاربر تعلق بگیرد. تعریف این روابط در مدلها باعث میشود واکشی دادهها، ویرایش و حتی فیلتر آنها به شکلی روان و قدرتمند انجام شود. روابط لاراول در حقیقت قلب تعاملات هوشمند میان دادهها هستند.
رابطه یک به یک (One to One)
در سیستم Eloquent، زمانی که دو جدول دارای ارتباط مستقیم و یکتا با یکدیگر هستند، از رابطه یک به یک یا One to One Relationship استفاده میشود. این نوع ارتباط زمانی کاربرد دارد که هر رکورد در یک جدول دقیقاً با یک رکورد در جدول دیگر مرتبط است؛ مانند ارتباط میان کاربران و پروفایلها، جایی که هر کاربر فقط یک پروفایل دارد و هر پروفایل متعلق به یک کاربر است.
برای تعریف این رابطه در مدل اصلی (مثلاً User)، از متد hasOne استفاده میشود:
public function profile()
{
return $this->hasOne(Profile::class);
}
در اینجا، متد hasOne مشخص میکند که هر کاربر، تنها یک رکورد در جدول profiles دارد. لاراول بهصورت پیشفرض انتظار دارد کلید خارجی (user_id) در جدول profiles وجود داشته باشد تا بتواند ارتباط را برقرار کند.
در سمت دیگر رابطه، یعنی در مدل Profile، باید متد belongsTo تعریف شود تا مشخص شود هر پروفایل به کدام کاربر تعلق دارد:
public function user()
{
return $this->belongsTo(User::class);
}
متد belongsTo بیانگر این است که مدل فعلی (Profile) به مدل دیگر (User) وابسته است.
این ساختار ساده اما قدرتمند، خوانایی و هماهنگی بالایی میان دادهها ایجاد میکند. با استفاده از آن میتوان بهراحتی دادهها را واکشی کرد، مثلاً:
$user = User::find(1);
$profile = $user->profile;
رابطه یک به یک پایهایترین نوع روابط در Eloquent است که به کمک متدهای hasOne و belongsTo، اتصال دادهها را به شکل شفاف و کارآمد ممکن میسازد.
رابطه یک به چند (One to Many)
در معماری دادهها، یکی از پرکاربردترین روابط در Eloquent، رابطه یک به چند یا (One to Many Relationship) است. این نوع رابطه زمانی بهکار میرود که یک موجودیت بتواند چندین رکورد وابسته در جدول دیگر داشته باشد. برای مثال، هر پست (Post) ممکن است دارای چندین نظر (Comment) باشد، اما هر نظر فقط به یک پست تعلق دارد.
در مدل Post، برای تعریف این ارتباط از متد hasMany استفاده میشود:
public function comments()
{
return $this->hasMany(Comment::class);
}
متد hasMany مشخص میکند که هر پست میتواند چندین نظر مرتبط داشته باشد. لاراول بهصورت خودکار فرض میکند که جدول comments دارای ستونی به نام post_id است که به شناسه جدول posts اشاره دارد. این ساختار باعث میشود بتوان بهسادگی تمامی نظرات یک پست را دریافت کرد:
$post = Post::find(1);
$comments = $post->comments;
در سمت دیگر رابطه، در مدل Comment، متد belongsTo تعریف میشود تا نشان دهد هر نظر به یک پست خاص تعلق دارد:
public function post()
{
return $this->belongsTo(Post::class);
}
این متد belongsTo مسیر معکوس رابطه را مشخص میکند و اجازه میدهد از طریق هر نظر، پست مرتبط با آن را فراخوانی کنیم.
رابطه یک به چند از پرکاربردترین الگوها در طراحی دیتابیس است و با ترکیب متدهای hasMany و belongsTo، کار با دادهها را در Eloquent طبیعی و ساده میسازد. این الگو زیربنای بسیاری از ساختارهای پیچیدهتر مانند دستهبندی محصولات، مقالات و دیدگاهها در فریمورک لاراول است.
رابطه چند به چند (Many to Many)
در Eloquent، زمانی که دو موجودیت بتوانند هر دو به چندین رکورد از یکدیگر مرتبط باشند، از رابطه چند به چند یا (Many to Many Relationship) استفاده میشود. این نوع رابطه در مواردی مانند ارتباط بین کاربران و نقشها کاربرد دارد؛ جایی که هر کاربر میتواند چندین نقش داشته باشد و هر نقش نیز میتواند به چند کاربر اختصاص یابد.
برای پیادهسازی این ساختار، از متد belongsToMany در هر دو مدل استفاده میشود. بهعنوان مثال، در مدل User مینویسیم:
public function roles()
{
return $this->belongsToMany(Role::class);
}
و در مدل Role نیز:
public function users()
{
return $this->belongsToMany(User::class);
}
در این نوع رابطه، یک جدول واسط یا همان pivot table نقش اصلی را ایفا میکند. این جدول معمولاً شامل دو ستون است که کلیدهای خارجی از هر دو جدول اصلی را در خود ذخیره میکند. در مثال بالا، نام جدول واسط معمولاً role_user است و شامل ستونهای user_id و role_id خواهد بود. لاراول بهصورت خودکار این نام را تشخیص میدهد، اما در صورت نیاز میتوان نام دلخواهی را نیز تعیین کرد.
با استفاده از این ساختار میتوان بهسادگی نقشهای هر کاربر را دریافت کرد:
$user = User::find(1);
$roles = $user->roles;
همچنین میتوان از متدهایی مانند attach()، detach() و sync() برای مدیریت دادههای جدول واسط استفاده کرد.
رابطه چند به چند با کمک متد belongsToMany و جدول pivot table یکی از قدرتمندترین قابلیتهای Eloquent است که امکان ایجاد ارتباطات پیچیده و پویا بین دادهها را فراهم میکند و در طراحی سیستمهای کاربرمحور، مدیریت دسترسیها و دستهبندیهای پیشرفته نقشی حیاتی دارد.
جمع بندی
اگر با معماری mvc در لاراول آشنا باشید میدانید که یکی از مهم ترین بخش ها مودل میباشد. در نهایت، Eloquent ORM قلب تعامل لاراول با پایگاه داده است؛ ابزاری که سادگی، سرعت و امنیت را در کنار هم فراهم میکند. با استفاده از مدلها و روابط، میتوان دادهها را بهصورت شیگرا و خوانا مدیریت کرد. تسلط بر Eloquent، گامی اساسی برای ساخت پروژههای تمیز، قابل نگهداری و حرفهای در دنیای لاراول است.









نظر خود را بنویسید