mnm.mtl
mnm.mtl

Reputation: 51

generate slug field for an existing data in database

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 .

Upvotes: 2

Views: 954

Answers (2)

John Lobo
John Lobo

Reputation: 15339

Try this.

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

Note:Keep backup for safty purpose if its genuine data

Upvotes: 1

Malkhazi Dartsmelidze
Malkhazi Dartsmelidze

Reputation: 4992

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
App\Models\entreprise::where('slug', '')->chunk(500, function($recs){
  $recs->map(function($record){
    $record->update([
      'slug' => Str::slug($record->RS)
    ]);
  });
});

Upvotes: 2

Related Questions