搜索

首页  >  问答  >  正文

博客未在数据库中正确显示或存储

<p>一旦我删除了一个博客,它就完全被删除了。我可以创建一个新的博客,但它不会显示在网站或数据库中。这是我的BlogController:</p> <pre class="brush:php;toolbar:false;"><?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','博客删除成功'); } }</pre> <p>问题显然出现在第103行,public function update:<code> $blog->fill($request);</code> 它既不存储在数据库中,也不在网页/博客中可见。我尝试删除那一行,但结果相同。没有任何变化。我不明白问题可能是什么。有人可以帮忙吗?</p>
P粉111641966P粉111641966482 天前632

全部回复(1)我来回复

  • P粉958986070

    P粉9589860702023-09-02 00:26:46

    第一种选择为了使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();

    回复
    0
  • 取消回复