چگونه رکوردهای دیتابیس را در Eloquent لاراول حذف کنیم؟
در این مقاله میخوانید
چطور میتوانیم رکوردهای دیتابیس را در Eloquent لاراول حذف کنیم؟ در Eloquent، رکوردهای پایگاهداده را با استفاده از روش Parent Model Class میتوانید بهراحتی حذف کنید. درواقع، دستور link:delete که قبلاً در نسخه پایه برنامه آزمایشی پیادهسازی شده است، میتواند لینکها را براساس شناسه لینک حذف کند.
بهمنظور حذف رکوردهای دیتابیس در Eloquent لاراول، نخست باید دستور جدیدی برای حذف فهرستها ایجاد کنید. سپس هر لینک مرتبط با فهرستی که باید حذف شود، به فهرست لینکهای پیشفرض اختصاص داده خواهد شد. در این نوشتار آموزش کاملی بر حذف رکوردهای دیتابیس در لاراول را ارائه میدهیم، با ما همراه باشید.
نحوه حذف رکوردهای دیتابیس در لاراول
در پنجره ترمینال، دستور زیر را برای بوتاسترپکردن Artisan جدید اجرا کنید:
docker-compose exec app php artisan make:command ListDelete
با این کار، فایل ListDelete.php جدیدی در app/Console/Commands ایجاد میشود. فایل را در ویرایشگر کد (Code Editor) انتخابی خود باز کنید:
app/Console/Commands/ListDelete.php
با بهروزرسانی این کد، میتوانید فهرست لینکشده را حذف کنید؛ بهشرطیکه Unique Slug آن را انجام دهید. Unique Slug نامی مناسب برای URL است و برای شناسایی هر فهرست استفاده میشود.
کارهای زیر همان کارهایی است که در متد ()handle باید انجام دهید:
- Slug ارائهشده کاربر را دریافت و بررسی کنید که آیا فهرستی با Slug منطبق بر پایگاهداده وجود دارد یا خیر.
- اگر فهرست معتبری یافت نشد، پیغام خطایی نشان داده خواهد شد.
- اگر فهرست معتبری یافت شد، از کاربر میخواهد تا آن را تأیید کند.
- سپس، لینکهای مرتبط با فهرست را که حذف میشوند، مجدداً به فهرست پیشفرض اختصاص دهید.
- درنهایت، فهرست را از پایگاهداده حذف کنید.
اگر تابهحال تمام قسمتهای این سری را دنبال کرده باشید، قبلاً هنگام ایجاد دستور LinkUpdate کد مشابهی پیادهسازی کردهاید. اکنون تفاوت اصلی این است که به درخواست اطلاعات اضافی از کاربر نیازی ندارید و قبل از اجرای متد ()delete، باید بهروزرسانی کلی برای تغییر لینکهای مرتبط به فهرستهای دیگر را اجرا کنید.
در این قسمت، باید کد boilerplate را در فایل ListDelete.php با کد زیر جایگزین کنید:
<?php namespace App\Console\Commands; use App\Models\Link; use App\Models\LinkList; use Illuminate\Console\Command; class ListDelete extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'list:delete {list_slug}'; /** * The console command description. * * @var string */ protected $description = 'Delete Lists'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return int */ public function handle() { $list_slug = $this->argument('list_slug'); $list = LinkList::firstWhere('slug', $list_slug); if ($list === null) { $this->error("Invalid or non-existent List."); return 1; } if ($this->confirm("Confirm deleting the list '$list->title'? Links will be reassigned to the default list.")) { $default_list = LinkList::firstWhere('slug', 'default'); if (!$default_list) { $default_list = new LinkList(); $default_list->title = 'default'; $default_list->slug = 'default'; $default_list->save(); } $this->info("Reassigning links to default list..."); Link::where('link_list_id', $list->id)->update(['link_list_id' => $default_list->id]); $list->delete(); $this->info("List Deleted."); } return 0; } }
درنهایت، فایل را ذخیره کنید.
برای آشنایی کامل با فریمورک لاراول مقالهی زیر را از دست ندهید.
در کد قبلی، تلاش متد ()handle برای پیداکردن فهرست پیوند براساس Slug شروع میشود. اگر فهرست معتبری یافت نشد، برنامه بهاشتباه خارج میشود. هنگامی که فهرست معتبری یافت میشود، متد ()confirm بالا میآید و از کاربر درخواست میکند تا فهرست را تأیید کند.
پس از تأیید، برنامه فهرست پیشفرض را پیدا یا درصورت لزوم، فهرست جدیدی ایجاد میکند و آن را به متغیر default_list$ اختصاص میدهد. سپس، تمام لینکهای مرتبط با فهرست حذفشده را پیدا و بهروزرسانی میکند. همچنین، فراخوانی زنجیرهای برای متد ()update شناسه فهرست ارجاعشده را در همه پیوندهای مطابق با کوئری بهروزرسانی خواهد کرد. درادامه، این خط برای شما هایلایت شده است.
پسازآن، فهرست با متد ()delete حذف میشود که درادامه هایلایت شده است. این روش برای تمامی مدلهای Eloquent ازطریق Parent Model Class دردسترس خواهد بود. برای حذف فهرست، ابتدا باید دستور link:show را اجرا کنید تا تمام لینکهای موجود در دیتابیس را بهدست آورید:
docker-compose exec app php artisan link:show
Output +----+-------------------------------------------------+--------------+----------------------------------+ | id | url | list | description | +----+-------------------------------------------------+--------------+----------------------------------+ | 1 | https://digitalocean.com/community | digitalocean | DO Community | | 2 | https://digitalocean.com/community/tags/laravel | digitalocean | Laravel Tutorias at DigitalOcean | | 3 | https://digitalocean.com/community/tags/php | digitalocean | PHP Tutorials at DigitalOcean | | 4 | https://twitter.com/digitalocean | social | Twitter | | 5 | https://dev.to/digitalocean | social | DEV.to | | 6 | https://laravel.com/docs/8.x/eloquent | default | Laravel Eloquent Docs | +----+-------------------------------------------------+--------------+----------------------------------+
برای حذف فهرست Digitalocean و برگرداندن آن لینکها به فهرست default، باید دستور زیر را اجرا کنید:
docker-compose exec app php artisan list:delete digitalocean
عملیات حذفکردن را با تایپ Y و فشردن کلید Enter تأیید کنید. سپس، خروجی زیر را مشاهده خواهید کرد:
Output Confirm deleting the list 'digitalocean'? Links will be reassigned to the default list. (yes/no) [no]: > y Reassigning links to default list... List Deleted.
اگر دوباره دستور ()link:show را اجرا کنید، اطلاعات بهروزشده را بهشکل زیر مشاهده خواهید کرد:
Output +----+-------------------------------------------------+---------+----------------------------------+ | id | url | list | description | +----+-------------------------------------------------+---------+----------------------------------+ | 1 | https://digitalocean.com/community | default | DO Community | | 2 | https://digitalocean.com/community/tags/laravel | default | Laravel Tutorias at DigitalOcean | | 3 | https://digitalocean.com/community/tags/php | default | PHP Tutorials at DigitalOcean | | 4 | https://twitter.com/erikaheidi | social | Twitter | | 5 | https://dev.to/erikaheidi | social | DEV.to | | 6 | https://laravel.com/docs/8.x/eloquent | default | Laravel Eloquent Docs | +----+-------------------------------------------------+---------+----------------------------------+
حال این برنامه فرمانی اختصاصی برای حذف فهرست لینکها دارد.
جمعبندی
در این مقاله، دربارهی رکوردهای دیتابیس در Eloquent لاراول صبحت کردیم و بهطور کامل به شما آموزش دادیم که با استفاده از چه دستورهایی میتوانید این کار را انجام دهید. اگر درباره نحوه حذف رکوردهای دیتابیس در Eloquent لاراول سؤال یا ابهامی دارید، آن را در بخش کامنتها با ما بهاشتراک بگذارید تا کارشناسان و مهندسان پارس پک در سریعترین زمان ممکن شما را راهنمایی کنند.
سؤالات متداول
1. چگونه یک رکورد را در Eloquent لاراول حذف کنیم؟
برای حذف یک رکورد در Eloquent لاراول، باید متد ()delete را فراخوانی کنید:
$user = User::find(1); $user->delete();
همچنین با استفاده از متد ()destroy، میتوانید یک کلید اصلی (آرایهای از کلیدهای اصلی) از رکوردهای مدنظرتان حذف کنید:
User::destroy(1); User::destroy([1, 2, 3]);
2. Eloquent لاراول چیست؟
Eloquent نوعی نگاشت رابطهای شیء (ORM) است که بهطور پیشفرض در چهارچوب لاراول گنجانده شده است. ORM نرمافزاری است که مدیریت سوابق پایگاهداده را با نمایش دادهها بهعنوان اشیاء تسهیل میکند و بهعنوان لایهای انتزاعی در بالای موتور پایگاهداده که برای ذخیره دادههای برنامه استفاده میشود، کار میکند.