当我在update()之前使用where()时, laravel元素问题



在laravel 8和element中,当我在update()之前使用where()时,初始化条件终止!

例如,

$post = Post::find($id);
$post->update(['status' => 'published']); 

这个更新查询是:

update `posts` set `status` = 'published' where `id`='1' 

但是当我使用where()时:

$post = Post::find($id);
$post->where('status', '=', 'unpublished')->update(['status' => 'published']); 

update query is:

update `posts` set `status` = 'published' where `status`='unpublished' 

但是我希望它像下面这样

update `posts` set `status` = 'published' where `status`='unpublished' and `id`='1' 

为什么是这样的查询?我的期望错了吗?还是臭虫?

这是因为您在Collection上使用where而不是构建新的查询。

如果你想用一个属性的特定值更新当前的$post,你需要使用if代替。

$post = Post::find($id);
if ($post->status == 'unpublished')
$post->update(['status' => 'published']); 

最新更新