TGViewer
| AmirHossein | | AmirHossein | @amirhdeveloper · 611 subscribers
Post #314 178
فصل چهار - مدل‌ها و 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 #لاراول #فصل_۴
💠 @AmirhDeveloper
.
  • ❤ 1
  • 👍 1
More from @amirhdeveloper
  1. Sep 30, 2026پکیج LaraGram Sentinel منتشر شد؛ یک پنل مانیتورینگ که هیچ چیزی از زیر دستش در نمی‌ره! تمام…
  2. Sep 23, 2026از امروز با کاهش شدید حاکرها مواجه میشیم
  3. Sep 19, 2026🔴 سوال سوم دو Region دارید: US-East و EU-West. کاربران در هر دو Region هستند. سیستم باید…
  4. Sep 19, 2026🟠 سوال دوم فرض کنید Service A به Service B درخواست می‌زند. B به‌دلیل overload، latency با…
  5. Sep 19, 2026🟢 سوال اول فرض کنید یک سرویس backend داریم که به PostgreSQL وصل می‌شود. تعداد requestها ن…
  6. Sep 19, 2026خیلی وقته پست‌های کانال فقط درمورد LaraGram بوده، وقتشه یکم جالب‌ترش کنیم اگر ممبرها هنوز…
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 →