skip to Main Content

i am using laravel and phpmyadmin and i need to add slug field for like 12K entries in my database .

i tried using a route to update the empty ‘slug’ column with slug data :

Route::get('/slug', function(){


$needSlugs = entreprise::where('slug', '')->get();

foreach($needSlugs as $slug){
    $slug->update([
        'slug' => Str::slug($slug->RS)
    ]);
}});

but it takes so much time and it returns an error after slugging about 400 columns and i need to start again and it will take me hours to finish, i searched a lot and didn’t find a good solution for my case .

any good way to do it please !!

PS : i am using the sluggable-eloquent package to slug any new saved data in the DB .

2

Answers


  1. 12K rows is nothing. It usually should take only seconds to complete, there might be other reason why it doesn’t completes
    Probably it’s because gateway time out or other constraints on your server.
    Try running it using php artisan tinker, and also try to chunk your records.

    $ php artisan tinker
    
    AppModelsentreprise::where('slug', '')->chunk(500, function($recs){
      $recs->map(function($record){
        $record->update([
          'slug' => Str::slug($record->RS)
        ]);
      });
    });
    
    Login or Signup to reply.
  2. Try this.

    $needSlugs = entreprise::whereNull('slug')->update(["slug"=> DB::raw("replace(trim(lower(RS)), ' ', '-')")]);
    

    Note:Keep backup for safty purpose if its genuine data

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search