Laravel:使用一个查询更新行
我的表中有Laravel:使用一个查询更新行,laravel,eloquent,Laravel,Eloquent,我的表中有title和slug字段,其中slug=null。现在,我如何使用facadeStr::slug($title)编写slug字段titleslug,当然,如果可能的话,只需一个查询 我可以通过对数据库的许多查询来循环: foreach ($posts as $post) { $post->update(['slug' => Str::slug($post->title)]); } 但我如何通过一个查询来完成类似的操作: Post::all()->upd
title
和slug
字段,其中slug
=null
。现在,我如何使用facadeStr::slug($title)
编写slug
字段title
slug,当然,如果可能的话,只需一个查询
我可以通过对数据库的许多查询来循环:
foreach ($posts as $post) {
$post->update(['slug' => Str::slug($post->title)]);
}
但我如何通过一个查询来完成类似的操作:
Post::all()->update(['slug' => Str::slug($this->title)]);
也许可以通过向collection
all()
方法中添加callback
来实现这一点?我认为您想要做的是不可能的,因为方法all()
返回一个集合,并且没有与该集合关联的此类方法更新
尽管您可以在控制器中创建一个方法来执行您提到的foreach,并将代码变得更干净。只要它们的值相同,您就可以这样做
Post::query()->update(['slug' => Str::slug($this->title)]);
你可以跟我核对一下
DB::enableQueryLog();
Post::query()->update(['slug' => Str::slug($this->title)]);
$log = DB::getQueryLog();
dd($log);
它不适用于
all()
,但是你可以使用,其中
看到:缺少a[但这应该可以工作。正确的语法:Post::query()->update(['slug'=>Str::slug($this->title)];
@BramVerstraten很好。当我复制他的代码时,我一定删除了第一个[。更新了我的答案。