Laravel后台修改Post的active状态无效,点击提交无数据库变更怎么办?
问题排查与解决
表单传值逻辑错误
你点击的是「Make inactive」按钮,目的是将激活状态(active=1)的文章改为非激活(active=0),但表单里的hidden字段active传的value是1,等于把状态又设回了原来的值,数据库自然不会有变化。应该把value改成0:<input type="number" id="active" name="active" value="0" hidden readonly>Post模型未配置可填充字段
Laravel默认会保护模型的批量赋值操作,如果你没在Post模型的$fillable数组里加入active字段,$post->update($attribute)不会对该字段生效。需要在模型中添加:class Post extends Model { protected $fillable = ['active', // 其他需要批量赋值的字段]; }优化方案:直接切换状态
既然是切换状态,其实不需要通过表单传递值,直接在控制器中取反当前模型的active值更简洁,还能避免传值错误:public function makeInactive(Post $post){ // 取反当前状态,1变0,0变1 $post->update(['active' => !$post->active]); return redirect()->back(); }对应的表单也可以去掉hidden的
active字段,简化代码。
内容的提问来源于stack exchange,提问作者Memonik
相关产品推荐
相关产品推荐

