TGViewer
| کانال توسعه‌دهندگان لاراول | | کانال توسعه‌دهندگان لاراول | @developixlaravel · 1.54K subscribers
Post #100 673
فصل چهار - مدل‌ها و Eloquent ORM

بخش دوم - مدل ها - قسمت یازدهم


1- متد table
برای انجام کوئری‌ها روی جداول دلخواه در پایگاه داده استفاده می‌شود. معمولاً از این متد زمانی استفاده می‌شود که نمی‌خواهید یا نمی‌توانید از مدل‌های Eloquent استفاده کنید.
$users = DB::table('users')->get();

این کد تمام رکوردهای جدول users را بازیابی می‌کند.

2- متد isDirty
بررسی می‌کند که آیا مقدار یک یا چند فیلد از مدل تغییر کرده است یا خیر. این متد به شما کمک می‌کند تا قبل از ذخیره‌سازی یک مدل، متوجه شوید که کدام فیلدها تغییر کرده‌اند.
$user = User::find(1);
$user->name = 'John Doe';

if ($user->isDirty('name')) {
echo 'Name has been changed!';
}

این کد بررسی می‌کند که آیا فیلد name در مدل User تغییر کرده است یا خیر. اگر تغییر کرده باشد، پیامی چاپ می‌کند.

3- متد isClean
برعکس isDirty است و بررسی می‌کند که آیا هیچ تغییری در مدل رخ نداده است. این متد بررسی می‌کند که آیا هیچ یک از فیلدهای مدل تغییر نکرده‌اند.

4- متد wasChanged
بررسی می‌کند که آیا فیلد یا فیلدهایی پس از ذخیره‌سازی مدل در پایگاه داده تغییر کرده‌اند یا خیر. این متد معمولاً پس از ذخیره‌سازی مدل (save()) استفاده می‌شود.

5- متد getOriginal
مقدار اصلی یک فیلد را پیش از تغییر و ذخیره‌سازی مدل در پایگاه داده برمی‌گرداند. این متد می‌تواند قبل یا بعد از ذخیره مدل استفاده شود.
$user = User::find(1);
echo $user->getOriginal('name');

$user->name = 'John Doe';
echo $user->getOriginal('name'); // Same

این کد مقدار اولیه فیلد name را پیش از هر تغییری نمایش می‌دهد، حتی اگر فیلد تغییر کرده باشد، همچنان مقدار اصلی را نشان می‌دهد.

6- متد sharedLock
برای جلوگیری از تغییر داده‌های انتخاب‌شده در یک کوئری توسط سایر تراکنش‌ها استفاده می‌شود، اما به سایر تراکنش‌ها اجازه خواندن این داده‌ها را می‌دهد. این نوع قفل را "قفل اشتراکی" می‌نامند. این متد برای محافظت از داده‌ها در برابر تغییرات ناگهانی در حین انجام تراکنش‌ها مفید است.
$users = User::where('active', 1)
->sharedLock()
->get();

این کد تمام کاربران فعال را با یک قفل اشتراکی انتخاب می‌کند. این کاربران نمی‌توانند در طول این تراکنش تغییر کنند، اما سایر تراکنش‌ها همچنان می‌توانند آن‌ها را بخوانند.

7- متد lockForUpdate
برای اعمال قفل به‌روزرسانی روی رکوردها استفاده می‌شود. برخلاف sharedLock، این نوع قفل تنها به یک تراکنش اجازه به‌روزرسانی رکوردهای انتخاب‌شده را می‌دهد و سایر تراکنش‌ها نمی‌توانند این رکوردها را تا زمانی که قفل آزاد نشود تغییر یا حتی بخوانند.
$users = User::where('active', 1)
->lockForUpdate()
->get();

این کوئری کاربران فعال را با قفل به‌روزرسانی انتخاب می‌کند. در طول این تراکنش، هیچ تراکنش دیگری نمی‌تواند این کاربران را تغییر دهد یا حتی آن‌ها را بخواند.

8- متد fresh
برای بازیابی آخرین نسخه یک رکورد از پایگاه داده استفاده می‌شود. این متد مدل فعلی را از پایگاه داده تازه‌سازی کرده و تغییرات جدیدی که در پایگاه داده ثبت شده‌اند را نشان می‌دهد.
$user = User::find(1);
$user->name = 'John';
$user->fresh();

این متد مدل User را دوباره از پایگاه داده بارگذاری می‌کند، بنابراین هر تغییری که در مدل انجام‌شده اما ذخیره نشده است، بازنویسی خواهد شد.

9- متد refresh
مشابه fresh است، اما علاوه بر تازه‌سازی مدل از پایگاه داده، روابط (relationships) مربوط به مدل را نیز بازنویسی می‌کند. اگر مدل دارای روابطی باشد، refresh آن‌ها را نیز دوباره از پایگاه داده بازیابی می‌کند.
$user = User::with('posts')->find(1);
$user->name = 'John';
$user->refresh();

این کد مدل User را همراه با روابط آن (مانند posts) از پایگاه داده مجدداً بازیابی می‌کند. هر تغییری که ذخیره نشده باشد، از بین می‌رود و اطلاعات از پایگاه داده مجدداً بارگذاری می‌شود.

10- متد withoutGlobalScope
به شما امکان می‌دهد یک یا چند Global Scope اعمال‌شده روی مدل‌ها را به‌صورت موقت غیرفعال کنید. در لاراول، Global Scope ها می‌توانند به صورت پیش‌فرض برای همه کوئری‌های یک مدل اعمال شوند. با این متد می‌توانید این محدودیت‌ها را کنار بگذارید.
قابلیت Global Scope در لاراول به یک محدودیت یا شرط کلی گفته می‌شود که به صورت خودکار برای تمامی کوئری‌های یک مدل اعمال می‌شود.
$users = User::withoutGlobalScope('active')->get(); // Test query

این کوئری کاربران را بدون اعمال Global Scope مربوط به کاربران فعال بازمی‌گرداند.

از قسمت بعد به آشنایی با روابط و متد های آنها می پردازیم.

🔖 #Laravel, #PHP, #لاراول, #فصل_۴

👤 AmirHossein

💎 Channel: @DevelopixLaravel
  • ❤ 4
  • 👍 1
More from @developixlaravel
  1. Oct 1, 2026روابط پایگاه داده چند ریختی یا Eloquent Polymorphic در لاراول - قسمت اول در لاراول، روابط…
  2. Sep 30, 2026مدیریت همزمانی و قفل‌گذاری روی پردازش‌ها در لاراول (Laravel Atomic Locks) در بخش چهارم از…
  3. Sep 26, 2026🔥 پکیج: ورود با حساب‌های دیگر؛ Socialite برای اضافه‌کردن ورود با حساب‌های دیگر به پروژه ل…
  4. Sep 25, 2026🔒 فقط داده‌های تأییدشده را ذخیره کن وقتی یک فرم ویرایش پروفایل داری، ممکن است کلاینت علاو…
  5. Sep 20, 2026حفاظت از پردازش ها با Laravel Rate Limiter بخش سوم - پیکربندی در قسمت سوم از مجموعه آموزش…
  6. Sep 16, 2026🚀 ‏LaraGram Brain منتشر شد! از این به بعد برای ساخت ربات‌های تلگرام با فریم‌ورک LaraG…
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 →