我有一个博客网站。我改了我的商标名。所以我需要改变所有的博客文章,包括我的品牌名称。我能找到他们,就像:
$search = 'old-brand-name'; $posts = \App\Models\BlogPost::where('description', 'LIKE', '%'.$search.'%')->get();
但我必须用我的新品牌名称替换数据库级别的这些字符串。我该怎么做?
fruv7luv1#
你应该迭代每一篇文章,然后用新的品牌名称替换旧的品牌名称来更改描述,并更新这篇文章。
foreach($posts as $post){ $old_des = $post->description; $post->description = str_replace($search,'new-brand-name', $post->description); $post->save(); }
希望能对你有所帮助
fiei3ece2#
您可以使用查询生成器在单个事务中查找/替换字符串值。
$oldBrandName = 'Acme Co'; $newBrandName = 'Bar Co'; DB::update( 'update blog_posts set description = replace(description, ?, ?)', [ $oldBrandName, $newBrandName ] );
ryhaxcpt3#
$search = 'old-brand-name'; $posts = \App\Models\BlogPost::where('description', $search)->update('description', $newName);
只有当“描述”栏的内容与您的品牌名称完全一致时,这才有效,否则您必须在“描述”栏中提供有关内容的更具体信息。
nszi6y054#
您可以使用mysql replace,它将所有出现的字符替换为一个表列: update posts set description = REPLACE(description,'old','new'); 它更有效,因为您不必查询所有出现的结果来替换字符。segundo,使用集合回调而不是foreach,它更具可读性和性能友好性(如Map、缩小等)
update posts set description = REPLACE(description,'old','new');
gfttwv5a5#
如果您需要更新所有帖子并获得所有结果:
$old = 'old-brand-name'; $new = 'new-brand-name'; $posts = \App\Models\BlogPost::where('description', 'LIKE', '%' . $search . '%') ->get() ->map(function ($item) use ($old, $new) { $item->description = str_replace($old, $new, $item->description); $item->save(); return $item; }); // Print all dd($posts->toArray());
5条答案
按热度按时间fruv7luv1#
你应该迭代每一篇文章,然后用新的品牌名称替换旧的品牌名称来更改描述,并更新这篇文章。
希望能对你有所帮助
fiei3ece2#
您可以使用查询生成器在单个事务中查找/替换字符串值。
ryhaxcpt3#
只有当“描述”栏的内容与您的品牌名称完全一致时,这才有效,否则您必须在“描述”栏中提供有关内容的更具体信息。
nszi6y054#
您可以使用mysql replace,它将所有出现的字符替换为一个表列:
update posts set description = REPLACE(description,'old','new');
它更有效,因为您不必查询所有出现的结果来替换字符。segundo,使用集合回调而不是foreach,它更具可读性和性能友好性(如Map、缩小等)
gfttwv5a5#
如果您需要更新所有帖子并获得所有结果: