博客未在数据库中正确显示或存储
P粉111641966
P粉111641966 2023-09-01 17:46:54
[PHP讨论组]

一旦我删除了一个博客,它就完全被删除了。我可以创建一个新的博客,但它不会显示在网站或数据库中。这是我的BlogController:

<?php

namespace App\Http\Controllers;

use App\Models\Blog;
use Illuminate\Http\Request;

class BlogController extends Controller
{
    /**
     * 显示资源列表。
     *
     * @return \Illuminate\Http\Response
     */
   
    public function index()
    {
        $blog = Blog::paginate(5);
        return view('blogs.index', compact('blog'))
            ->with('i',(request()->input('page',1)-1)*5);
    }

    /**
     * 显示创建新资源的表单。
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('blogs.create');
        
        Blog::create($request->all());
   
        return redirect()->route('blogs.index')
                        ->with('success','博客创建成功。');
    }
  
    /**
     * 在存储中存储新创建的资源。
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $request->validate([
            'title' => 'required',
            'description' => 'required',
        ]);

        $blog = new Blog;
       
        $blog->title = $request->title;
 
        $blog->description = $request->description;

        $blog->save();
        
        return redirect()->route('blogs.index');

    }
   
    /**
     * 显示指定的资源。
     *
     * @param  \App\Blog  $blog
     * @return \Illuminate\Http\Response
     */
    public function show(Blog $blog)
    {
        return view('blogs.show', compact('blog'));
    }
   
    /**
     * 显示编辑指定资源的表单。
     *
     * @param  \App\Blog  $blog
     * @return \Illuminate\Http\Response
     */
    public function edit(Blog $blog)
    {
        return view('blogs.edit', compact('blog'));
    }
  
    /**
     * 更新存储中的指定资源。
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Blog  $blog
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Blog $blog)
    {
        $request->validate([
            'title' => 'required',
            'description' => 'required',
        ]);

        // $blog->title = $request->title;
 
       // $blog->description = $request->description;

        $blog->fill($request);
        
        // dd($blog);

        return redirect()->route('blogs.index')
                        ->with('success','博客更新成功');

    }
  
    /**
     * 从存储中删除指定的资源。
     *
     * @param  \App\Blog  $blog
     * @return \Illuminate\Http\Response
     */
    public function destroy(Blog $blog)
    {
        $blog->delete();
  
        return redirect()->route('blogs.index')
                        ->with('success','博客删除成功');
    }
   

}

问题显然出现在第103行,public function update: $blog->fill($request); 它既不存储在数据库中,也不在网页/博客中可见。我尝试删除那一行,但结果相同。没有任何变化。我不明白问题可能是什么。有人可以帮忙吗?

P粉111641966
P粉111641966

全部回复(1)
P粉958986070

第一种选择为了使fill方法起作用,您必须在此之后调用$blog->save()

$blog->fill($request); 
$blog->save();

另外,当您使用fill方法时,您正在进行批量赋值。默认情况下,Laravel会保护您免受批量赋值字段的影响。

打开您的Blog.php模型,并将要批量赋值的字段添加到数组$fillable

/**
 * 可以批量赋值的属性。
 *
 * @var array
 */
protected $fillable = [
    'title',
    'description',
];

第二种选择是使用update方法(不要忘记在第一种选择的模型中也添加字段到$fillable,因为update方法也是批量赋值字段):

$blog->update($request);

第三种选择是手动逐个赋值每个字段,就像在store方法中所做的那样:

$blog->title = $request->title;
 
$blog->description = $request->description;

$blog->save();
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号