دورة laravel للمبتدئين الدرس الواحد والعشرون


فهاد الدرس الواحد والعشرون من دورة laravel للمبتدئين غادي نشوفوا كيفاش نخدموا ب SoftDeletes ف laravel فشنو كتدير SoftDeletes كتمكني باش ملي نمسح شي post يبقى عندي فقاعدة البيانات ولكن ميبانش فالموقع ديالي فل post كيكون فل corbeille مع إمكانية انني نسترجعوا مرة أخرى يلا بغيت.


1- إضافة deleted_at ل table posts

فباش نزيد SoftDeletes غادي نزيد migration جديدة غادي تدير ل commande :

php artisan make:migration add_soft_delete_to_posts

من بعد غادي تمشي ل database/migrations غادي تلقى ل migration تزادت فغادي تزيد الحقل softDeletes لي غادي يمكن من إضافة الحقل deleted_at ف table posts.

فكنفذ ل commande :

php artisan migrate

منبعد كتمشي لقاعدة البيانات ف table posts غادي تلقى الحقل deleted_at تزاد.

فالكود ديال الملف هو :

                                //
<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class AddSoftDeleteToPosts extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('posts', function (Blueprint $table) {
            //
            $table->softDeletes();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('posts', function (Blueprint $table) {
            //
            $table->dropColumn('deleted_at');
        });
    }
}
                            

2- إضافة SoftDeletes ل model Post.php

غادي نمشي ل model Post.php فيه غادي نزيد SoftDeletes باش ل application ديالي تعرف بلي غادي نخدم به وكنزيد ايضا واحد ل array dates لي كنعطيها الحقل deleted_at كتزيدو حتى هو فالحقول لي عبارة عن تاريخ.

الكود ديال الملف هو :

                                //
<?php

namespace App;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    //
    use SoftDeletes;
    protected $dates = ['deleted_at'];
    
    public function user(){
        return $this->belongsTo(User::class);
    }
    public function comments(){
        return $this->hasMany(Comment::class);
    }
}
                            

3- استرجاع les posts لي حذفنا

يلا حاولتي تمسح post عبر الرابط :
غادي تمشي ل table posts غادي تلقى ل post مول ل id واحد باقي لكن ف deleted_at كاين التاريخ فاش تمسح كيف كنشوف فالصورة :



منبعد باش نسترجع les posts لي مسحت ممكن نخدم بل méthode onlyTrashed فكنزيد fonction getTrashed فل controller PostsController.php فوسطها كنسترجع les posts لي تمسحوا من ل corbeille وكنعرض العنوان ديالهم.

فالكود لي زدنا ف PostsController.php هو :

                                //
 public function getTrashed(){
        $trashed =  Post::onlyTrashed()->get();
        foreach($trashed as $trash){
            echo $trash->title;
        }
  }
                            

4- إضافة route ف web.php

فغادي نزيدو route ديال استرجاع les posts من ل corbeille كنعطيه ل fonction getTrashed منبعد ما تزيد لكود غادي تمشي ل trashed/ غادي تلقى العنوان ديال ل post لي مسحنا كيف كنشوف فالصورة :



الكود لي غادي تزيد ف web.php هو :

                                    //
Route::get('/trash','PostsController@getTrashed');