微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为数据库中的现有数据生成 slug 字段

如何解决为数据库中的现有数据生成 slug 字段

我正在使用 laravel 和 PHPmyadmin,我需要为数据库中的 12K 条目添加 slug 字段。

我尝试使用路由更新带有 slug 数据的空“slug”列:

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


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

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

但是它花费了太多时间并且在插入大约 400 列后返回错误,我需要重新开始,这将花费我几个小时才能完成,我搜索了很多,但没有找到适合我的案例的好的解决方案。

有什么好的方法请!!

PS:我正在使用 sluggable-eloquent 包将任何新保存的数据插入数据库中。

解决方法

12K 行不算什么。通常只需几秒钟即可完成,可能还有其他原因无法完成 可能是因为网关超时或服务器上的其他限制。 尝试使用 php artisan tinker 运行它,并尝试对您的记录进行分块。

$ php artisan tinker
App\Models\entreprise::where('slug','')->chunk(500,function($recs){
  $recs->map(function($record){
    $record->update([
      'slug' => Str::slug($record->RS)
    ]);
  });
});
,

试试这个。

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

注意:为安全起见,如果是真实数据,请保留备份

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。